Eu tenho uma matriz numpy contendo:
[1, 2, 3]
Eu quero criar um array contendo:
[1, 2, 3, 1]
Ou seja, quero adicionar o primeiro elemento ao final da matriz.
Eu tentei o óbvio:
np.concatenate((a, a[0]))
Mas recebo um erro dizendo ValueError: arrays must have same number of dimensions
Eu não entendo isso - os arrays são apenas arrays 1d.
np.insert([1,2,3], 3, 1)
Respostas:
append()
cria uma nova matriz que pode ser a antiga com o elemento anexado.Acho que é mais normal usar o método adequado para adicionar um elemento:
fonte
a
array. No entanto, ele retorna uma nova matriz modificada. Portanto, se aa
modificação for necessária,a = numpy.append(a,a[0])
deve ser usada.np.append
usanp.concatenate
. Isso apenas garante que o addon tenha uma dimensão. O erro OP foi oa[0]
tem 0 dimensões.a.append(1)
,a.add(1)
ou mesmo algo análogo a listas comoa + [1]
Ao anexar apenas uma vez ou uma vez de vez em quando, usar
np.append
em seu array deve ser suficiente. A desvantagem dessa abordagem é que a memória é alocada para um array completamente novo sempre que é chamado. Ao aumentar um array para uma quantidade significativa de amostras, seria melhor pré-alocar o array (se o tamanho total for conhecido) ou anexar a uma lista e converter em um array posteriormente.Usando
np.append
:Usando a lista python e convertendo para array posteriormente:
Matriz numpy pré-alocada:
Quando o tamanho final é desconhecido, a pré-alocação é difícil, tentei pré-alocar em blocos de 50, mas não cheguei perto de usar uma lista.
fonte
a[0]
não é um array, é o primeiro elemento dea
e, portanto, não tem dimensões.Tente usar
a[0:1]
, que retornará o primeiro elemento dea
dentro de uma única matriz de item.fonte
Experimente isto:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html
concatenate precisa que ambos os elementos sejam arrays entorpecidos; entretanto, a [0] não é uma matriz. É por isso que não funciona.
fonte
np.concatenate((a, [a[0]]))
. A lista será promovida a um tipo de array automaticamente de qualquer maneira, economizando um pouco de digitação.Este comando,
não altera a
a
matriz. No entanto, ele retorna uma nova matriz modificada. Portanto, se aa
modificação for necessária, o seguinte deve ser usado.fonte
fonte
Isso pode ser um pouco exagero, mas eu sempre uso a
np.take
função para qualquer indexação abrangente:fonte
Digamos
a=[1,2,3]
e você quer que seja[1,2,3,1]
.Você pode usar a função incorporada de acréscimo
Aqui, 1 é um int, pode ser uma string e pode ou não pertencer aos elementos da matriz. Impressões:
[1,2,3,1]
fonte
Se você quiser adicionar um elemento, use
append()
a = numpy.append(a, 1)
neste caso, adicione o 1 no final da matrizSe você deseja inserir um elemento, use
insert()
a = numpy.insert(a, index, 1)
neste caso, você pode colocar 1 onde desejar, usando o índice para definir a posição na matriz.fonte