2011-09-07 19 views
46

tengo una matriz numpy que contiene:Añadir solo elemento de matriz en numpy

[1, 2, 3] 

Quiero crear una matriz que contiene:

[1, 2, 3, 1] 

Es decir, quiero añadir el primer elemento de hasta el final de la matriz.

que han intentado lo obvio:

np.concatenate((a, a[0])) 

pero me da un error que dice ValueError: arrays must have same number of dimensions

No entiendo esto - los arreglos son ambas matrices simplemente 1d.

+0

'np.insert ([1,2,3], 3, 1)' – Sparkler

+2

Con la excepción de la respuesta aceptada, los otros son bastante raras. –

Respuesta

74

creo que es más normal utilizar el método adecuado para la adición de un elemento:

numpy.append(a, a[0]) 
+0

Tiene razón sobre 'append' (y tiene mi +1), pero creo que' concatenat' se supone que toma una tupla de matrices, según [this] (http://docs.scipy.org/doc/ numpy/reference/generated/numpy.concatenate.html) y [this] (http://www.scipy.org/Numpy_Example_List#concatenate), por ejemplo. – DMA57361

+0

opps, está correcto :) (como hay una coma, tal vez lo tome como una tupla incluso cuando no puse los paréntesis) – steabert

+0

Este comando no altera la matriz 'a'. Sin embargo, devuelve una nueva matriz modificada. Por lo tanto, si se requiere la modificación 'a', se debe usar' a = numpy.append (a, a [0]) '. – Amjad

11

a[0] no es una matriz, es el primer elemento de a y por lo tanto no tiene dimensiones.

En su lugar, pruebe usar a[0:1], que devolverá el primer elemento de a dentro de una única matriz de elementos.

7

probar esto

np.concatenate((a, np.array([a[0]])) 

http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html

concatenate necesita ambos elementos a ser array, sin embargo a [0] no es una matriz. Es por eso que no funciona.

+0

O, más simplemente 'np.concatenate ((a, [a [0]]))'. La lista se promocionará a un tipo de matriz automáticamente de todos modos, lo que le ahorrará algo de tipeo. –

3
t = np.array([2, 3]) 
t = np.append(t, [4]) 
3

Esto podría ser un poco exagerado, pero siempre uso el la función np.take para cualquier envolvente de la indexación :

>>> a = np.array([1, 2, 3]) 
>>> np.take(a, range(0, len(a)+1), mode='wrap') 
array([1, 2, 3, 1]) 

>>> np.take(a, range(-1, len(a)+1), mode='wrap') 
array([3, 1, 2, 3, 1]) 
0

Digamos a=[1,2,3] y desea que sea [1,2,3,1].

puede usar la función de agregación incorporada

np.append(a,1) 

Aquí 1 es un entero, puede ser una cadena y que puede o no puede pertenecer a los elementos de la matriz. Impresiones: [1,2,3,1]

+0

¡Bienvenido a StackOverflow! Es posible que desee leer [esta guía] (https://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks) sobre cómo formatear el código y luego actualice su respuesta para que es más legible :) También esta es una pregunta muy antigua con una respuesta aceptada, es mejor responder algunas nuevas – 0mpurdy

0

Este comando,

numpy.append(a, a[0])

no altera la matriz a. Sin embargo, devuelve una nueva matriz modificada. lo tanto, si se requiere a modificación continuación

a = numpy.append(a,a[0])

debe ser utilizado.

Cuestiones relacionadas