A diferença entre o método de armazenamento (n, 1) e (n,) dos objetos de matriz de array em numpy

  Informações: https://stackoverflow.com/questions/22053050/difference-between-numpy-array-shape-r-1-and-r

  Este artigo é uma pergunta sobre stackoverflow que eu abri acidentalmente.É sobre o objeto array em numpy. Escusado será dizer que a posição importante do numpy no mundo do python e do aprendizado de máquina. Traduza esta resposta aqui para compreendê-la para aprendizado.

  Nota: A tradução é apenas para fins de aprendizado.O autor é Gareth Rees e pode ter minhas próprias modificações.

  Apenas para fins de aprendizado !!!

  A melhor maneira de observar as matrizes NumPy é dividi-las em duas partes: um buffer de dados contém um elemento bruto (elemento original) e uma exibição (eu chamo de janela) para descrever e interpretar o buffer de dados.

  Por exemplo, se se criar um contendo 12 inteiro matriz  A  :

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

  Em seguida, a contém um buffer de dados, armazenado da seguinte maneira:

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

  E uma janela que define como interpretar os dados:

>>> a.flags 
  C_CONTIGUOUS: True 
  F_CONTIGUOUS: True 
  OWNDATA: True 
  gravável: True 
  ALINHADOS: True 
  UPDATEIFCOPY: False 
>>> a.dtype 
dtipo ( 'int64') 
>>> a.itemsize 
8 
>>> a.strides 
( 8,) 
>>> a.shape 
(12,)

  Aqui, shape = (12,) significa que a matriz é dominada por apenas um índice: de 0 a 11. Conceitualmente, se usarmos este índice separado para uma  etiqueta marcada, em seguida,  uma  ficaria assim:

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 │ 
└────┴────────┴────────┴────┴────────────────────────── ┴────┴────┘

  A operação de remodelar uma matriz não altera o buffer de dados, mas cria uma nova janela para interpretar os dados.

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

  A operação acima cria um  b que  possui o mesmo buffer de dados que  , mas agora é dominado por duas dimensões indexadas. Um de 0 a 2 e um de 0 a 3. Se rotularmos os dados, b  terá a seguinte aparência:

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 
│─────────┴─────────┴────┴─────────────────┴ ────┴────┴────┴────┴────┘

  Isso também significa:

>>> b [2,1] 
9

  O segundo índice muda mais rápido que o primeiro.Para reverter, você pode usar os seguintes parâmetros para criar uma matriz  c 

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

  Suplemento: order = 'F' ou order = 'C' significa que a indexação de matrizes é semelhante à linguagem C ou Fortran, respectivamente, e 'C' é o padrão

  Isso produzirá uma matriz com os seguintes í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

  Com a roupa de cama anterior, é fácil entender o seguinte exemplo:

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

  A matriz é dominada por dois índices, o primeiro índice é de 0 a 11 e o segundo índice é sempre 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 
┌────┬────┬────┬────┬─ ───┬────┬────┬────────┬────┬─────────────────┐ 
│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 
│─────────┴─────────┴────┴─────────────────┴ ────┴────┴────┴────┴────┘

  Então:

>>> d [10,0] 
10

  Uma matriz unidimensional achatada é livre em certo sentido, para que possamos definir o tamanho de cada dimensão:

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

  A operação acima cria uma matriz como esta:

i = 0 0 0 0 0 0 0 0 0 0 0 
j = 0 0 0 0 0 1 1 1 1 1 1 
k = 0 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 │ 
└────┴────────┴────┴───┴────────────┴────┴─────── ─┴────┴────┴────┘

  Então:

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

Acho que você gosta

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