Usando matrizes Python padrão, posso fazer o seguinte:
arr = []
arr.append([1,2,3])
arr.append([4,5,6])
# arr is now [[1,2,3],[4,5,6]]
No entanto, não posso fazer a mesma coisa numpy. Por exemplo:
arr = np.array([])
arr = np.append(arr, np.array([1,2,3]))
arr = np.append(arr, np.array([4,5,6]))
# arr is now [1,2,3,4,5,6]
Também examinei vstack
, mas quando uso vstack
em uma matriz vazia, recebo:
ValueError: all the input array dimensions except for the concatenation axis must match exactly
Então, como anexo uma nova linha a uma matriz vazia em numpy?
Respostas:
A maneira de "iniciar" a matriz que você deseja é:
Que é uma matriz vazia, mas tem a dimensionalidade adequada.
Não se esqueça de anexar ao longo do eixo 0:
Mas, @jonrsharpe está certo. De fato, se você for anexar um loop, seria muito mais rápido anexar a uma lista como no seu primeiro exemplo, depois converter para uma matriz numpy no final, já que você realmente não está usando numpy como pretendido durante o loop:
A maneira numpythonic de fazer isso depende da sua aplicação, mas seria mais como:
fonte
a = a[:N]
Embora eu acredite firmemente que você deve encontrar uma maneira de vetorizá-la (poste uma nova pergunta com suas especificações, se precisar de ajuda) ou apenas use listas até que o ciclo termine.Aqui está a minha solução:
fonte
Nesse caso, você pode querer usar as funções np.hstack e np.vstack
Você também pode usar a função np.concatenate.
Felicidades
fonte
usando uma definição de dtype personalizada, o que funcionou para mim foi:
fonte
No caso de adicionar novas linhas para a matriz em loop, atribua a matriz diretamente para a primeira vez em loop, em vez de inicializar uma matriz vazia.
Isso é útil principalmente quando a forma da matriz é desconhecida
fonte
Eu quero fazer um loop for, mas com o método askewchan ele não funciona bem, então eu o modifiquei.
fonte