La diferencia entre el método de almacenamiento (n, 1) y (n,) de los objetos de matriz de matriz en numpy

  Información: https://stackoverflow.com/questions/22053050/difference-between-numpy-array-shape-r-1-and-r

  Este artículo es una pregunta sobre stackoverflow que abrí accidentalmente. Se trata del objeto de matriz en numpy. No hace falta decir que la importante posición de numpy en el mundo del pitón y el aprendizaje automático. Traduce esta respuesta aquí para comprenderla para aprender.

  Nota: La traducción es solo para fines de aprendizaje. El autor es Gareth Rees y puede tener mis propias modificaciones.

  ¡Solo con fines de aprendizaje!

  La mejor manera de ver los arreglos NumPy es dividirlo en dos partes, un búfer de datos contiene un elemento sin procesar (elemento original) y una vista (lo llamo ventana) para describir e interpretar el búfer de datos.

  Por ejemplo, si creamos una matriz  a que  contenga 12 enteros :

>>> a = numpy.arange (12) 
>>> una 
matriz ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

  Luego, a contiene un búfer de datos, almacenado de la siguiente manera:

┌────┬────┬────┬────┬────┬────┬────┬────┬────┬──── ┬────┬────┐ 
│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │ 
└────┴────┴─── ─┴────┴────┴────┴────┴────┴────┴────┴────┴────┘

  Y una ventana que define cómo interpretar los datos:

>>> a.flags 
  C_CONTIGUOUS: True 
  F_CONTIGUOUS: True 
  DATOS PROPIOS: True 
  WRITEABLE: True 
  ALINEADO: True 
  UPDATEIFCOPY: False 
>>> a.dtype 
dtype ('int64') 
>>> a.itemsize 
8 
>>> a.strides 
( 8,) 
>>> una forma 
(12,)

  Aquí, shape = (12,) significa que la matriz está dominada por un solo índice: de 0 a 11. Conceptualmente, si utilizamos este índice por separado a una  etiqueta marcada, a continuación,  un  mirar lo desea:

i = 0 1 2 3 4 5 6 7 8 9 10 11 
┌────┬────┬────┬────┬────┬────┬────┬ ────┬────┬────┬────┬────┐ 
│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │ 
└────┴────┴────┴────┴────┴────┴────┴────┴────┴──── ┴────┴────┘

  La operación de remodelar una matriz no cambia el búfer de datos, pero crea una nueva ventana para interpretar los datos.

>>> b = a.reshape ((3, 4))

  La operación anterior crea un  b que  tiene el mismo búfer de datos que  , pero ahora está dominado por dos dimensiones indexadas. Uno de 0 a 2 y uno de 0 a 3. Si etiquetamos los datos, b  se verá así:

i = 0 0 0 0 1 1 1 1 2 2 2 2 
j = 0 1 2 3 0 1 2 3 0 1 2 3 
┌────┬────┬────┬────┬─ ───┬────┬────┬────┬────┬────┬────┬────┐ 
│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │ 
└────┴────┴────┴────┴────┴────┴────┴ ────┴────┴────┴────┴────┘

  Esto también significa:

>>> b [2,1] 
9

  El segundo índice cambia más rápido que el primer índice. Si desea invertir, puede usar los siguientes parámetros para crear una matriz  c 

>>> c = a.reshape ((3, 4), orden = 'F')

  Suplemento: order = 'F' u order = 'C' significa que la indexación de matrices es como lenguaje C o Fortran, respectivamente, y 'C' es el valor predeterminado

  Esto producirá una matriz con los siguientes índices:

i = 0 1 2 0 1 2 0 1 2 0 1 2 
j = 0 0 0 1 1 1 2 2 2 3 3 3 
┌────┬────┬────┬────┬─ ───┬────┬────┬────┬────┬────┬────┬────┐ 
│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │ 
└────┴────┴────┴────┴────┴────┴────┴ ────┴────┴────┴────┴────┘

  Significado

>>> c [2,1] 
5

  Con la ropa de cama anterior, es fácil entender el siguiente ejemplo:

>>> d = a.reshape ((12, 1))

  La matriz está dominada por dos índices, el primer índice es de 0 a 11 y el segundo índice siempre es 0:

i = 0 1 2 3 4 5 6 7 8 9 10 11 
j = 0 0 0 0 0 0 0 0 0 0 0 0 
┌────┬────┬────┬────┬─ ───┬────┬────┬────┬────┬────┬────┬────┐ 
│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │ 
└────┴────┴────┴────┴────┴────┴────┴ ────┴────┴────┴────┴────┘

  Entonces

>>> d [10,0] 
10

  Una matriz unidimensional aplanada es libre en cierto sentido, por lo que podemos definir el tamaño de cada dimensión nosotros mismos:

>>> e = a.reshape ((1, 2, 1, 6, 1))

  La operación anterior crea una matriz como esta:

i = 0 0 0 0 0 0 0 0 0 0 0 0 
j = 0 0 0 0 0 0 1 1 1 1 1 1 
k = 0 0 0 0 0 0 0 0 0 0 0 0 
l = 0 1 2 3 4 5 0 1 2 3 4 5 
m = 0 0 0 0 0 0 0 0 0 0 0 0 
┌────┬────┬────┬────┬────┬──── ┬────┬────┬────┬────┬────┬────┐ 
│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │ 
└────┴────┴────┴────┴────┴────┴────┴────┴─── ─┴────┴────┴────┘

  Entonces

>>> e [0,1,0,0,0] 
6

Supongo que te gusta

Origin www.cnblogs.com/chester-cs/p/12682612.html
Recomendado
Clasificación