2012-04-30 14 views
6

Mi pregunta es muy simple, supongamos que tengo una matriz comoObtención inversas (1/x) elementos de una matriz numpy

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

y me gustaría obtener una matriz como

[1, 0.5, 0.3333333, 0.25] 

Sin embargo, si se escribe algo así como

1/array 

o

np.divide(1.0, array) 

no funcionará.

La única forma que he encontrado hasta ahora es escribir algo como:

print np.divide(np.ones_like(array)*1.0, array) 

Pero estoy absolutamente Certains que hay una mejor manera de hacer eso. ¿Alguien tiene alguna idea?

Respuesta

7

1/array hace una división entera y devuelve array([1, 0, 0, 0]).

1./array desechará la matriz para flotar y hacer el truco:

>>> array = np.array([1, 2, 3, 4]) 
>>> 1./array 
array([ 1.  , 0.5  , 0.33333333, 0.25  ]) 
+0

Como acotación al margen, si coloca 'from __future__ import division' al comienzo de su código, siempre realizará una división real con un entero s. Este es el comportamiento predeterminado en Python 3, ya que es la respuesta que la mayoría de la gente espera. Aún puede obtener una división entera usando el operador '//'. – DaveP

1

me trataron:

inverse=1./array 

y que parecía funcionar ... La razón

1/array 

no funciona porque tu matriz es enteros y 1/<array_of_integers> hace división entera.

1

Otras formas posibles de obtener el recíproco de cada elemento de una matriz de enteros:

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

El uso de numpy recíproco:

inv = np.reciprocal(array.astype(np.float32)) 

Reparto:

inv = 1/(array.astype(np.float32)) 
Cuestiones relacionadas