У вас есть очень большая матрица, сохраненная в CSV-файле. Вы хотите транспонировать его и сохранить в другом файле. Вы не можете загрузить все данные в память одновременно. Как ты можешь это сделать?
Я думаю, что мы можем прочитать строку из файла и перенести ее в столбец и записать столбец в файл. Чтение и перенос строк в столбец — это нормально, но я не знаю, как записать в файл столбец за столбцом. Кто-нибудь может реализовать?
Во всяком случае, я дам вам подсказку:
ol = or x C + oc (consider arr[or][oc])
Он должен быть перемещен в новое место nl в транспонированной матрице, скажем, nl = A [nr] [nc] или в терминах C / C ++
nl = nr x R + nc
(R — количество столбцов, C — количество строк при транспонировании матрицы)
nr = oc и nc = or, поэтому заменив их на nl,
nl = oc x R + or
Так,
ol = or x C + oc
ol x R = or x C x R + oc x R
= or x N + oc x R (from the fact R * C = N)
= or x N + (nl - or) --- from [eq 1]
= or x (N-1) + nl
ИЛИ ЖЕ,
nl = ol x R - or x (N-1)
значения nl и ol никогда не выходят за пределы N-1, поэтому, учитывая деление по модулю с обеих сторон на (N-1), мы получаем следующее на основе свойств конгруэнтности:
nl mod (N-1) = (ol x R - or x (N-1)) mod (N-1)
= (ol x R) mod (N-1) - or x (N-1) mod(N-1)
= ol x R mod (N-1), since second term evaluates to zero
nl = (ol x R) mod (N-1), since nl is always less than N-1
Так что теперь вы можете просто прочитать один элемент за раз и поместить его в правильное положение в соответствующей транспонированной матрице.