ufunc 错误铸造真鸿沟
ufunc error casting true divide
我有下面的代码,可以将数组中的所有条目提升到一定范围的幂。然后我除以值的总和,将它们归一化。我不确定为什么会收到以下错误。有人可以指出问题并建议如何解决吗?
代码:
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
/=
运算符在尝试转换某些值时遇到问题。它似乎是 known limitation。尝试使用 w_test = w_test / w_test.sum()
或 w_test = np.divide(w_test, w_test.sum())
.
错误是由于 w_test
中存储的数据类型造成的。也就是说,您正在尝试在整数之间进行转换,并且存储在整数数组中的预期结果应该是浮点数,因为 /
是一个浮点数除法。这是由于 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]
我有下面的代码,可以将数组中的所有条目提升到一定范围的幂。然后我除以值的总和,将它们归一化。我不确定为什么会收到以下错误。有人可以指出问题并建议如何解决吗?
代码:
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
/=
运算符在尝试转换某些值时遇到问题。它似乎是 known limitation。尝试使用 w_test = w_test / w_test.sum()
或 w_test = np.divide(w_test, w_test.sum())
.
错误是由于 w_test
中存储的数据类型造成的。也就是说,您正在尝试在整数之间进行转换,并且存储在整数数组中的预期结果应该是浮点数,因为 /
是一个浮点数除法。这是由于 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]