2012-04-30 621 views
6

我的问题很简单,假设我有一个像获得倒数(1/X)numpy的数组的元素

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

一个数组,我想获得像

[1, 0.5, 0.3333333, 0.25] 
数组

不过,如果你喜欢写东西

1/array 

np.divide(1.0, array) 

它不起作用。

我到目前为止发现的唯一方法是写一样的东西:

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

但我绝对某些码,有一个更好的方式来做到这一点。有人有什么主意吗?

回答

7

1/array作出整数除法并返回array([1, 0, 0, 0])

1./array定投阵列浮动和做的伎俩:

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

顺便说一句,如果你在代码的开头放了'from __future__ import division',那么它总是会用整数进行真正的分割秒。这是Python 3中的默认行为,因为它是大多数人所期望的答案。你仍然可以使用'//'运算符来进行整数除法。 – DaveP

1

我想:

inverse=1./array 

而且似乎工作... 原因

1/array 

不起作用是因为你的数组是整数并且1/<array_of_integers>做整数除法。

1

其他可能的方式获得整数数组的每个元素的倒数:

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

使用numpy的的倒数:

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

演员:

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