Tienes una matriz muy grande guardada en un archivo csv. Quieres transponerlo y guardarlo en otro archivo. No puede cargar todos los datos en la memoria al mismo tiempo. ¿Cómo puedes hacerlo?
Creo que podemos leer una fila del archivo yTranspóngalo a una columna y escriba la columna en un archivo. Leer y transponer filas a columnas está bien para mí, pero no sé cómo escribir en un archivo columna por columna. ¿Alguien podría implementarlo?
Respuestas
0 para la respuesta № 1De todos modos te daré una pista:
ol = or x C + oc (consider arr[or][oc])
Se debe mover a la nueva ubicación nl en la matriz transpuesta, digamos nl = A [nr] [nc], o en términos C / C ++
nl = nr x R + nc
(R: recuento de columnas, C es el recuento de filas cuando se transpone la matriz) nr = oc y nc = o, por lo tanto, reemplazándolos por nl,
nl = oc x R + or
Asi que,
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
O,
nl = ol x R - or x (N-1)
los valores de nl y ol nunca van más allá de N-1, por lo que considerando la división de módulo en ambos lados por (N-1), obtenemos lo siguiente en función de las propiedades de congruencia,
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
Así que ahora solo puede leer un elemento a la vez y colocarlo en su posición correcta en la matriz transpuesta correspondiente.