Нахождение транспонирования очень, очень большой матрицы - PullRequest
3 голосов
/ 15 декабря 2011

У меня есть этот огромный двумерный массив данных.Хранится в порядке строк:

A (1,1) A (1,2) A (1,3) ..... A (n-2, n) A (n-1,n) A (n, n)

Я хочу переставить его в порядок столбцов

A (1,1) A (2,1) A (3,1) ....A (n, n-2) A (n, n-1) A (n, n)

Набор данных довольно большой - больше, чем умещается в оперативной памяти компьютера.(n составляет около 10 000, но каждый элемент данных занимает около 1 КБ места.)

Кто-нибудь знает хитрые или эффективные алгоритмы для этого?

Ответы [ 3 ]

3 голосов
/ 15 декабря 2011

Вам нужен класс Matrix, чтобы все ваше приложение обращалось к матрице через экземпляр класса.Тогда транспонирование может просто установить флаг, который обращает индексы при доступе к элементу.Мгновенная транспонирование!

1 голос
/ 15 декабря 2011

Создание n пустых файлов (если возможно, зарезервируйте достаточно места для элементов n).Итерация по вашей исходной матрице.Добавить элемент (i,j) в файл j.Как только вы закончите с этим, добавьте файлы, которые вы только что написали.

0 голосов
/ 15 декабря 2011

Наивный способ - просто прочитать файл 10000 раз и найти соответствующие столбцы для каждой строки. Это должно быть легко реализовать, но я не знаю, сколько времени потребуется для запуска программы.

В ваших комментариях вы упомянули о выводе другого файла, который вы затем должны отсортировать по sort. Это плохая идея, поскольку сортировка такого большого файла займет целую вечность. Сортировка является сложной (или, по крайней мере, ресурсоемкой) проблемой, поэтому обобщение преобразования в сортировку, вероятно, является неправильным способом сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...