python - * : 'numpy.ndarray' and 'numpy.float64' 不支持的操作数类型

标签 python numpy operand

长期阅读,第一次写作。

我在 google 和 stack overflow 上四处搜索,但并没有真正找到这个问题的一般答案。

我在使用 numpy 1.6.2 的 python 2.7.3 中收到“* 不受支持的操作数类型:‘numpy.ndarray’和‘numpy.float64’”错误。

错误来自于将 numpy 数组和 numpy float 相乘,但并非每次都会发生。

例如:

x = np.tan(1) # numpy.float64
y = np.array([0,1,2,3]) # numpy.ndarray
np.multiply(x,y) # works no problem

或者

x = np.tan(np.abs(np.multiply(-31,41)))  # numpy.float64
y = np.square(np.add(np.divide(np.zeros(100),42),(-27)**40)) # numpy.ndarray
np.multiply(x,y) # works no problem

两者都有效

现在是问题 child :

np.multiply(np.square(np.add(np.divide(np.zeros(100),42),-27)**40)),
np.tan(np.abs(np.multiply(-31,41))))

或者,x 定义如上:

np.multiply(np.square(np.add(np.divide(np.zeros(100),42),(-27)**40)),x)

两者都产生错误:NotImplemented

我知道随机函数和数字看起来很奇怪,但从概念上讲这仍然应该有效,因为当它们分别设置为变量时它有效。

为什么会这样?我该如何在一般意义上修复它?

非常感谢! 杰森

最佳答案

我怀疑这里的问题是 NumPy 无法在其数组中存储 Python long 值。一旦您尝试这样做,它就会将数组的数据类型切换为 object。然后对数组的算术运算变得更加棘手,因为 NumPy 不能再自己进行算术运算。

>>> np.array(27**40)
array(1797010299914431210413179829509605039731475627537851106401L, dtype=object)
>>> np.array(27**40) * np.tan(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'numpy.ndarray' and 'numpy.float64'

奇怪的是,交换参数的顺序有时会起作用:

>>> np.tan(1) * np.array(27**40)
2.7986777223711575e+57

在第二种情况下,结果的类型是 Python float,而不是 NumPy 数组。

解决方法是避免在 NumPy 数组中创建 long 值,而是使用 float:

>>> np.array(27.0**40)
array(1.797010299914431e+57)
>>> np.array(27.0**40) * np.tan(1)
2.7986777223711575e+57
>>> np.multiply(np.square(np.add(np.divide(np.zeros(10),42),(-27.0)**40)),np.tan(1))
array([  5.02925269e+114,   5.02925269e+114,   5.02925269e+114,
         5.02925269e+114,   5.02925269e+114,   5.02925269e+114,
         5.02925269e+114,   5.02925269e+114,   5.02925269e+114,
         5.02925269e+114])

如果您确实收到类似 this is the future 的错误,首先要做的是检查要相乘的数组的 dtype。它是否包含 NumPy 值或 Python 对象?

关于python - * : 'numpy.ndarray' and 'numpy.float64' 不支持的操作数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14408122/

相关文章:

python - 在 Scrapy 选择器中使用多个 xpath

python - 重复记录缺少 many2one 字段问题

python - Nicing 正在运行的 python 进程?

python - 当我使用元素乘法时,R 和 Python 之间的广播规则不同 (*)

python - 等效于使用 numpy

python - 阅读时使用 np.loadtxt 拆分列

C++ 没有运算符 ">>"匹配这些操作数(<string> 包含在 header 中)

c - C 错误中的 MPI 操作数

python - 使用 Python 进行网页抓取

python - 检查输入中是否有字母