Macie bardzo dużą macierz zapisaną w pliku csv. Chcesz go przetransponować i zapisać w innym pliku. Nie można załadować wszystkich danych do pamięci jednocześnie. Jak możesz to zrobić?
Myślę, że możemy odczytać wiersz z pliku iprzetransponuj go do kolumny i zapisz kolumnę w pliku. Czytanie i transponowanie wierszy do kolumny jest dla mnie w porządku, ale nie wiem, jak napisać do kolumny kolumny po kolumnie.
Odpowiedzi:
0 dla odpowiedzi № 1W każdym razie dam ci wskazówkę:
ol = or x C + oc (consider arr[or][oc])
Ma zostać przeniesiony do nowej lokalizacji nl w transponowanej macierzy, powiedzmy nl = A [nr] [nc] lub w warunkach C / C ++
nl = nr x R + nc
(R - liczba kolumn, C to liczba wierszy podczas transpozycji macierzy) nr = oc i nc = lub, więc zastępując je dla nl,
nl = oc x R + or
Więc,
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
LUB,
nl = ol x R - or x (N-1)
wartości nl i ol nigdy nie wykraczają poza N-1, więc biorąc pod uwagę podział modulo po obu stronach przez (N-1), otrzymujemy następujące, oparte na właściwościach kongruencji,
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
Teraz możesz po prostu przeczytać jeden element na raz i umieścić go we właściwej pozycji w odpowiedniej transponowanej macierzy.