ufunc错误强制转换为真除法

时间:2018-08-13 22:27:03

标签: python-3.x for-loop numpy-ndarray

我有下面的代码将数组中的所有条目提升到一定范围的幂。然后,我将其除以值的总和以对其进行归一化。我不确定为什么会出现以下错误。有人可以指出问题并提出解决方法的建议吗?

代码:

smp_ary=np.arange(0, 3)


for i in range(3):
    w_test=smp_ary[i]**np.arange(0,4)
    w_test /= w_test.sum()

错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-66-1a1a52fa6553> in <module>()
      1 for i in range(3):
      2     w_test=smp_ary[i]**np.arange(0,4)
----> 3     w_test /= w_test.sum()

TypeError: No loop matching the specified signature and casting
was found for ufunc true_divide

2 个答案:

答案 0 :(得分:1)

该错误是由于存储在w_test中的数据类型引起的。也就是说,您正在尝试在整数之间进行转换,并且由于/是一个浮点除法,因此要存储在整数数组中的预期结果应该是float。这是由于numpy已将就地操作的默认强制转换更改为'same_kind'。因此,您可能想更改w_test中的数据类型。在这种情况下,您将要铸造花车。

即:

for i in range(3):
    w_test=(smp_ary[i]**np.arange(0,4)).astype('float')
    w_test/=w_test.sum()

通过这种方式,您可以拥有相同的数据类型。

您也可以只使用broadcasting,因为这是numpy的主要目的之一:

s=smp_ary[:,None]**np.arange(0,4)
s/s.sum(1)[:,None]

答案 1 :(得分:0)

/=运算符在尝试强制转换某些值时遇到问题。它似乎是known limitation。尝试使用w_test = w_test / w_test.sum()w_test = np.divide(w_test, w_test.sum())