python-3.x - ufunc 错误转换真除法

标签 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

最佳答案

该错误是由于 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()

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

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

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

关于python-3.x - ufunc 错误转换真除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51831397/

相关文章:

python-3.x - 如何更改 Tkinter 模块的背景颜色?

python - 在python中动态创建变量

r - 如何使用 apply 而不是 for 循环来实现 stringMatch 函数?

python-3.x - 使用 PCA 降维,同时保留百分比方差

python-3.x - requests.post 发出 get 请求

matlab删除矩阵计算中的for循环

javascript - 带有 for 循环的倒数计时器

python - Numpy bool 索引分配有时会失败并分配整个数组

python - 将 numpy ndarray 数组元素展平为特征行

python - 如何在 numpy ndArray 中插入值?