Não consigo descobrir como usar uma matriz ou matriz da maneira que normalmente usaria uma lista. Quero criar uma matriz (ou matriz) vazia e, em seguida, adicionar uma coluna (ou linha) a ela por vez.
No momento, a única maneira de encontrar isso é:
mat = None
for col in columns:
if mat is None:
mat = col
else:
mat = hstack((mat, col))
Considerando que, se fosse uma lista, eu faria algo assim:
list = []
for item in data:
list.append(item)
Existe uma maneira de usar esse tipo de notação para matrizes ou matrizes NumPy ?
.empty()
significa que é possível encontrar valores aleatórios nas células, mas a matriz é criada mais rapidamente do que, por exemplo, com.zeros()
?Uma matriz NumPy é uma estrutura de dados muito diferente de uma lista e foi projetada para ser usada de maneiras diferentes. Seu uso
hstack
é potencialmente muito ineficiente ... toda vez que você o chama, todos os dados na matriz existente são copiados para uma nova. (Aappend
função terá o mesmo problema.) Se você deseja construir sua matriz uma coluna por vez, é melhor mantê-la em uma lista até que ela termine e depois convertê-la em uma matriz.por exemplo
item
pode ser uma lista, uma matriz ou qualquer iterável, desde que cada umitem
tenha o mesmo número de elementos.Nesse caso em particular (
data
é algo iterável manter as colunas da matriz), você pode simplesmente usar(Observe também que o uso
list
como nome de variável provavelmente não é uma boa prática, pois mascara o tipo interno com esse nome, o que pode levar a erros.)EDITAR:
Se, por algum motivo, você realmente deseja criar uma matriz vazia, basta usar
numpy.array([])
, mas isso raramente é útil!fonte
np.concatenate()
), você pode usar:np.empty((0, some_width))
. 0, então sua primeira matriz não será lixo.Para criar uma matriz multidimensional vazia no NumPy (por exemplo, uma matriz 2D
m*n
para armazenar sua matriz), caso você não saibam
quantas linhas você acrescentará e não se importe com o custo computacional mencionado por Stephen Simmons (ou seja, reconstruir o variedade em cada append), você pode espremer para 0 a dimensão para a qual você deseja anexar:X = np.empty(shape=[0, n])
.Dessa forma, você pode usar, por exemplo (aqui,
m = 5
que assumimos que não sabíamos ao criar a matriz vazia, en = 2
):o que lhe dará:
fonte
Eu olhei bastante para isso porque precisava usar um numpy.array como um conjunto em um dos meus projetos de escola e precisava ser inicializado vazio ... Não encontrei nenhuma resposta relevante aqui no Stack Overflow, então comecei rabiscando algo.
O resultado será:
Portanto, você pode inicializar diretamente uma matriz np da seguinte maneira:
Eu espero que isso ajude.
fonte
a=np.array([])
parece padrão parafloat64
Você pode usar a função de acréscimo. Para linhas:
Para colunas:
EDIT
Obviamente, como mencionado em outras respostas, a menos que você esteja fazendo algum processamento (por exemplo, inversão) na matriz / matriz Toda vez que você anexa algo a ele, eu apenas criava uma lista, anexava a ele e depois o convertia em um array.
fonte
Se você absolutamente não sabe o tamanho final da matriz, pode aumentar o tamanho da matriz assim:
0
na primeira linha.numpy.append
é outra opção. Isso chamanumpy.concatenate
.fonte
Você pode aplicá-lo para criar qualquer tipo de matriz, como zeros:
fonte
a= [0] * 5
é a solução simplesAqui estão algumas soluções alternativas para tornar os numpys mais parecidos com Listas
SAÍDA: matriz ([2., 24.])
fonte
Dependendo do motivo pelo qual você está usando isso, pode ser necessário especificar o tipo de dados (consulte 'dtype' ).
Por exemplo, para criar uma matriz 2D de valores de 8 bits (adequado para uso como uma imagem monocromática):
Para uma imagem RGB, inclua o número de canais de cores na forma:
shape=(H,W,3)
Você também pode considerar inicializar com zero em
numpy.zeros
vez de usarnumpy.empty
. Veja a nota aqui .fonte
Eu acho que você deseja lidar com a maior parte do trabalho com listas e depois usar o resultado como uma matriz. Talvez seja esse o caminho;
fonte
Eu acho que você pode criar uma matriz numpy vazia como:
Este formato é útil quando você deseja acrescentar uma matriz numpy no loop.
fonte
Para criar uma matriz NumPy vazia sem definir sua forma, existe uma maneira de:
1
preferido. porque você sabe que vai usar isso como numpy.
2)
NumPy converte isso no tipo np.ndarray posteriormente, sem extra
[]
dimionsion
.fonte
Talvez o que você está procurando seja algo como isto:
Dessa forma, você pode criar uma matriz sem nenhum elemento. É semelhante a:
Dessa forma, você poderá acrescentar novos elementos à sua matriz com antecedência.
fonte