python - read - Ver en una matriz numpy?
read matrix python (1)
Claro, solo indexalo como lo harías normalmente. Ej y = x[:k, :]
Esto devolverá una vista en la matriz original. No se copiarán datos, y las actualizaciones realizadas a y
se reflejarán en x
viceversa.
Editar:
Normalmente trabajo con arreglos 3D de> 10GB de uint8, así que me preocupo mucho por esto ... Numpy puede ser muy eficiente en la administración de la memoria si tienes en cuenta algunas cosas. Aquí hay algunos consejos para evitar hacer copias de matrices en la memoria:
Use +=
, -=
, *=
, etc. para evitar hacer una copia de la matriz. Por ejemplo, x += 10
modificará la matriz en su lugar, mientras que x = x + 10
hará una copia y la modificará. (también, eche un vistazo a numexpr )
Si desea hacer una copia con x = x + 10
, tenga en cuenta que x = x + 10.0
causará que x
sea copiado automáticamente a una matriz de coma flotante, si no lo fue. Sin embargo, x += 10.0
, donde x
es una matriz entera, hará que el 10.0
se coloque hacia abajo en int con la misma precisión que la matriz, en su lugar.
Además, muchas funciones numpy toman un parámetro de out
, por lo que puede hacer cosas como np.abs(x, x)
para tomar el valor absoluto de x
in situ.
Como segunda edición, aquí hay algunos consejos más sobre vistas y copias con matrices numpy:
A diferencia de las listas de Python, y = x[:]
no devuelve una copia, devuelve una vista. Si desea una copia (que, por supuesto, duplicará la cantidad de memoria que está usando) use y = x.copy()
A menudo escucharás acerca de la "indexación elegante" de matrices numpy. Usar una lista (o matriz de enteros) como índice es "indexación elegante". Puede ser muy útil, pero copia los datos.
Como ejemplo de esto: y = x[[0, 1, 2], :]
y = x[:3,:]
devuelve una copia, mientras que y = x[:3,:]
devolvería una vista.
Incluso la indexación realmente loca como x[4:100:5, :-10:-1, None]
es una indexación "normal" y devolverá una vista, así que no temas usar todo tipo de trucos de corte en grandes matrices.
x.astype(<dtype>)
devolverá una copia de los datos como el nuevo tipo, mientras que x.view(<dtype>)
devolverá una vista.
Tenga cuidado con esto, sin embargo ... Es extremadamente poderoso y útil, pero necesita comprender cómo se almacenan los datos subyacentes en la memoria. Si tiene una matriz de flotadores y los ve como enteros (o viceversa) numpy interpretará los bits subyacentes de la matriz como ints.
Por ejemplo, esto significa que 1.0
como un flotador de 64 bits en un sistema little-endian será 4607182418800017408
cuando se visualice como un int de 64 bits, y una matriz de [ 0, 0, 0, 0, 0, 0, 240, 63]
si se visualiza como un uint8. Sin embargo, esto es realmente bueno cuando se necesita hacer pequeños giros de bits en arreglos grandes ... Usted tiene un control de bajo nivel sobre cómo se interpreta el búfer de memoria.
Tengo una matriz numpy
2D. ¿Hay alguna forma de crear una vista que incluya las primeras k
filas y todas las columnas?
El objetivo es evitar copiar los datos subyacentes (la matriz es tan grande que no es factible hacer copias parciales).