1
resposta

Reshape com 3 colunas

Após a aula 08 tentei usar o reshape para que a matriz ficasse na ordem, (km,ano, km medio) organizando o dados_new. Utilizei o order ='F' mas não ficou como imaginei que ficaria. Qual o motivo ?

dados_new
#retorno do dados_new
array([[44410.        ,  5712.        , 37123.        ,     0.        ,
        25757.        ],
       [ 2003.        ,  1991.        ,  1990.        ,  2019.        ,
         2006.        ],
       [ 2775.625     ,   204.        ,  1280.10344828,            nan,
         1981.30769231]])
#tentei colocar em 3 colunas
np.array(dados_new).reshape((5,3), order='F')
#retorno
array([[44410.        ,   204.        ,  2019.        ],
       [ 2003.        , 37123.        ,            nan],
       [ 2775.625     ,  1990.        , 25757.        ],
       [ 5712.        ,  1280.10344828,  2006.        ],
       [ 1991.        ,     0.        ,  1981.30769231]])

Eu esperava que ficasse da seguinte forma, por exemplo: ([44410, 2003, 2775.625])

Obrigado

1 resposta

Oi Vinicius, como você está? Espero que esteja bem =)

Nesse caso podemos simplesmente fazer a transposta dessa matriz, ou seja, iremos inverter as linhas e as colunas. Com isso, o que é coluna na matriz vira linha.

Então se temos as seguintes colunas:

44410.  ,  5712.   , 37123.   ,     0.   , 25757. 

Esses valores serão linhas na matriz transposta:

44410.
5712. 
37123.
0.
25757. 

Para dizermos ao numpy que queremos a transposta, basta utilizar o atributo T:

np.array(dados_new).T

Resultado:

array([[44410.        ,  2003.        ,  2775.625     ],
       [ 5712.        ,  1991.        ,   204.        ],
       [37123.        ,  1990.        ,  1280.10344828],
       [    0.        ,  2019.        ,            nan],
       [25757.        ,  2006.        ,  1981.30769231]])

Da forma como você fez não ficou como esperado porque o order F, irá pegar os 5 primeiros valores do array e colocar nas linhas, após isso, pegará os próximos 5... Na matriz original dados_new temos:

array([[44410.        ,  5712.        , 37123.        ,     0.        ,
        25757.        ],
       [ 2003.        ,  1991.        ,  1990.        ,  2019.        ,
         2006.        ],
       [ 2775.625     ,   204.        ,  1280.10344828,            nan,
         1981.30769231]])
  • Qual o primeiro valor? 44410
  • Qual o segundo valor? 2003
  • Terceiro? 2775.625
  • Quarto? 5712
  • Quinto? 1991

Com isso, acabamos as 5 primeiras linhas da primeira coluna da matriz. Vamos para as linhas da próxima coluna:

  • Qual o sexto valor? 204
  • Qual o sétimo valor? 37123
  • Oitavo? 1990
  • Nono? 1280.10344828
  • Décimo? 0

E assim por diante... É assim que o order F funciona. Por isso a matriz resultante do comando np.array(dados_new).reshape((5,3), order='F') foi:

array([[44410.        ,   204.        ,  2019.        ],
       [ 2003.        , 37123.        ,            nan],
       [ 2775.625     ,  1990.        , 25757.        ],
       [ 5712.        ,  1280.10344828,  2006.        ],
       [ 1991.        ,     0.        ,  1981.30769231]])

Qualquer dúvida é só falar, estou à disposição. Abraços e bons estudos!