2012-08-07 18 views
8

Digamos la matriz numpy es:añadir un número a todos los elementos pares o impares indexadas en serie numpy sin bucles

A = [1,1,2,3,4] 

Simplemente puede hacer:

A + 0,1

para agregar un número a cada elemento numpy array

Estoy buscando una manera de agregar un número solo a los números impares o incluso indexados A[::2] +1 mientras se mantiene intacta toda la matriz.

¿Es posible agregar un número a todos los elementos impares o pares sin ningún bucle?

+0

¿por qué necesita estar sin bucles? podrías mostrar tu código? donde quieres implementar esto en el código? –

+1

¿Qué significa "manteniendo intacta toda la matriz"? ¿Estás descartando las operaciones en el lugar? – DSM

Respuesta

16
In [43]: A = np.array([1,1,2,3,4], dtype = 'float') 

In [44]: A[::2] += 0.1 

In [45]: A 
Out[45]: array([ 1.1, 1. , 2.1, 3. , 4.1]) 

Tenga en cuenta que esto modifica A. Si desea dejar A sin modificar, copiar A primera:

In [46]: A = np.array([1,1,2,3,4], dtype = 'float') 

In [47]: B = A.copy() 

In [48]: B[::2] += 0.1 

In [49]: B 
Out[49]: array([ 1.1, 1. , 2.1, 3. , 4.1]) 

In [50]: A 
Out[50]: array([ 1., 1., 2., 3., 4.]) 
2

Algo con lista por comprensión podría funcionar.

A = [1,1,2,3,4] 
A = [A[i] + (0 if (i%2 == 0) else .1) for i in range(len(A))] 

Simplemente rápido y sucio con un ternario. Puede que no funcione en su versión de Python, no puede recordar con qué versiones funciona.


registramos en Python 2.7.3 y 3.2.3 de Python, la salida es la misma:

>>> A = [1,1,2,3,4] 

>>> A 
[1, 1, 2, 3, 4] 

>>> A = [A[i] + (0 if (i%2 == 0) else .1) for i in range(len(A))] 

>>> A 
[1, 1.1, 2, 3.1, 4] 
+0

Ah, me perdí el numpy array bit. La primera respuesta es mucho mejor. Mi error. – DrGodCarl

5

Además de las respuestas anteriores, para modificar los números impares, con índices se debe utilizar un [1: : 2] en lugar de A [:: 2]

Cuestiones relacionadas