|
|
||||||
Транспонировать один массив в другой03.01.2013, 22:08. Показов 14859. Ответов 27
Метки нет (Все метки)
Есть большой массив данных (от 5000 до 800000 строк на 100-200 столбцов)
Сделал транспонирование через For
Может есть стандартное средство языка для такого дела?
0
|
||||||
| 03.01.2013, 22:08 | |
|
Ответы с готовыми решениями:
27
У меня есть массив t[n,m]. Мне нужно последний столбец записать в другой массив и транспонировать его Перенести в один другой массив четные числа.Затем перенести в еще один другой массив нечетные числа. |
|
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
||||||
| 03.01.2013, 22:26 | ||||||
|
Почему требуется транспонирование?
Массив можно изначально создать правильной ориентации. В Excel есть метод Application.Transpose (функция листа ТРАНСП), но он имеет существенные ограничения по количеству элементов при работе с массивами VBA (AFAIR в Excel 2007 - 8192 элемента, 2010 - ?). Однако, если аргументом является диапазон листа, а не массив, то ограничений нет, например
2
|
||||||
|
|
||||||
| 03.01.2013, 22:47 [ТС] | ||||||
|
суть в определении строк и столбцов на листе excel и в массиве.
когда я помещаю из массива данные на лист - пользуюсь командой
У листа "на рост диапазона" актуальными являются строки, а у динамического массива - последняя размерность rasm2 Но в Cells строки указываются первыми. Вообщем мне нужно чтоб динамическая размерность соответствовала строкам. для этого массив нужно транспонировать... или как-то по другому определитья с динамической размерностью и строками... При количестве строк массива 23000 транспонирование одного столбца занимает 2-4 минуты. У меня - до 140 столбцов в массиве. Тупой метод - ждать. А хочется, чтоб душа пела))) Добавлено через 2 минуты совсем позабыл отметить! массив не читается с листа. он формируется в оперативке. двумерный динамический.
0
|
||||||
|
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
||
| 03.01.2013, 23:09 | ||
|
1
|
||
|
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
|
||
| 03.01.2013, 23:30 | ||
Не понял как накладываются ограничения в зависимости от доступной памяти, но у меня максимальный размер виден на калькуляторе (250364*200 = 50072800)
1
|
||
|
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
|
|||||||||||
| 03.01.2013, 23:40 | |||||||||||
|
И причём это размер на два массива.
Максимально, что мог проверить:
Казанский,
2
|
|||||||||||
|
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
|
|
| 04.01.2013, 04:05 | |
|
Можно поэксперементировать и определить максимальный размер.
И объявить массив как предлагал Казанский При формировании проверять. достиг предела - выгрузить на лист, и начать заполнять снова
0
|
|
|
|
|
| 04.01.2013, 10:24 [ТС] | |
|
вот в этом направлении и двигаюсь...
решил определять в масив завершенную информационную единицу и выгружать ее... выгрузок конечно больше получается ... по времени сегодня буду замерять затраты и сравнивать...
0
|
|
|
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
|
|
| 04.01.2013, 11:21 | |
|
Alex77755,
0
|
|
|
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
|
||||||
| 04.01.2013, 12:08 | ||||||
0
|
||||||
|
|
|
| 04.01.2013, 23:44 [ТС] | |
|
по поводу времени... сделал учетчик времени, который не сильно врёт)))
вообщем по времени расклад следующий. создавал массив 22941 строк на 210 столбцов на листе если создать в оперативке такой массив всех данных в горизонтальной проекции, а потом его транспонировать (тем способом, который я указывал в вопросе к теме) в верикальный массив (который можно легко слить на лист), то затраты времени составляют порядка 3-6 часов только на транспонирование в зависимости от машины. Это тот способ, котрым я шел до задания данного вопроса... честно говоря на установление точного времени не хватило терпения... Сделал следующее: По вашему совету создал сразу правильный массив, но при этом потерял динамическую составляющую процесса. Пришлось полностью перелопатить код, который обеспечивает его целостность...... Правильный (вертикальный) массив сделал под одну семантическую единицу, которая насчитывает 31 сегмент. А у меня в данном случае семантиков 4844 штуки. Но это совершенно не предел... может быть и 16 000 и 36 000 Для каждой семантической единицы заполнял массив и сливал его на лист в общий массив данных Вроде кошмарный процесс по постоянному обращению к листу.... Но! При простом сливе массива на лист, а не поэлементном переписывании на все дела ушло от 3:46 (ноутбук) до 1:26 (стационар 64 разряда система) минут! Осталось вопросом для меня: как это происходит в ядре excel? Скорость слива же прямо не сопоставима с поэлементным переписыванием. А для меня очень важна однозначность результата! если поэлементное переписывание массива на лист дает гарантию попадания инфы в нужную ячейку, то будет ли также безошибочным "слив" массива ? Почему задаю этот вопрос? когда копируем с одного листа на другой диапазон столбцов в котором много пустых областей, то количество строк в итоге может различаться. Вероятно из-за автоматического пропуска алгоритмом копирования-вставки пустых строк... Вот этого же боюсь и здесь... Добавлено через 5 минут Месага - это слэнговое "message" )))
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|
| 05.01.2013, 00:06 | |
|
Да не может быть 6 часов...
0
|
|
|
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
|
|
| 05.01.2013, 00:09 | |
|
Я тоже в шоке!
0
|
|
|
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
|
||||||
| 05.01.2013, 00:26 | ||||||
|
Ну выгрузка, естественно, дольше:
Заполнение 3 с Транспонирование 2 с Выгрузка на лист 1 минута 28 с Но это же (250364, 100) Добавлено через 58 секунд
А такой Dim mas2(22941, 210) На заполнение и транспонирование вообще 0 Выгрузка 15 с Ноут не на лампах случайно? Может накал катодов увеличить
2
|
||||||
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
||||||
| 05.01.2013, 00:38 | ||||||
|
У меня похожий код отработал за:
Заполнили за 15,6875 Повернули за 5,203125 Выгрузили за 123,75 Хотя конечно работает как-то тяжело этот 2007... один раз завис...
1
|
||||||
|
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
|
|
| 05.01.2013, 00:44 | |
|
А что там в ячейку пишет у ТС? Какой объём?
От размера и скорость сильно меняется Эти R,C увеличили время в 3 раза(по крайней мере) Заполнили за 4,6875 Повернули за 1,6875 Выгрузили за 43,29688
1
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|
| 05.01.2013, 01:19 | |
|
Ну да - я в начале сдуру через "-" эти числа связал - так Экс стал всё в дату конвертить, очень долго.
1
|
|
| 05.01.2013, 01:19 | |
|
Помогаю со студенческими работами здесь
20
Преобразовать один массив в другой
Как поместить один массив в другой?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|