我怀疑这里的问题是NumPy无法存储Pythonlong
其数组中的值。一旦您尝试执行此操作,它就会将数组的数据类型切换为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
在第二种情况下,结果的类型是 Pythonfloat
,不是 NumPy 数组。
解决方法是避免创建long
NumPy 数组中的值,并使用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])
如果您确实遇到这样的错误,那么首先要做的是检查dtype
被相乘的数组。它包含 NumPy 值或 Python 对象吗?