这正在工作:
In [49]: type([1, 2, 3])
Out[49]: list
In [50]: type(array([1, 2, 3]))
Out[50]: numpy.ndarray
In [52]: 1j*array([1, 2, 3])
Out[52]: array([ 0.+1.j, 0.+2.j, 0.+3.j])
当我尝试在自己的列表上执行此操作时 asdf
:
In [46]: type(asdf)
Out[46]: list
In [47]: type(array(asdf))
Out[47]: numpy.ndarray
In [48]: 1j*array(asdf)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-48-dd0d8b4948e8> in <module>()
----> 1 1j*array(asdf)
TypeError: unsupported operand type(s) for *: 'complex' and 'numpy.ndarray'
乘法似乎对短列表很满意,asdf
可能会出什么问题?它相当大,有 20347 个元素,但这应该不重要?
最佳答案
Python 解释器将 *
转换为对 __mul__
(或其变体之一)的调用。对于3 * obj
,它将使用obj
的方法。
根据您的评论,asdf
包含字符串:
In [205]: A=np.array(['A','B','C'])
In [206]: B=np.array([1,2,3])
In [207]: B.__mul__(3)
Out[207]: array([3, 6, 9])
In [208]: A.__mul__(3)
Out[208]: NotImplemented
对于字符串数组,该方法返回“NotImplemented”,但没有说明原因。这可能就是为什么错误消息显示 numpy.array
,即 A
的类型,而不是 A
的 dtype
>。这是一条解释器错误消息,而不是 numpy 错误消息。
有一个可以处理字符串的 multiply
版本:
In [213]: np.char.multiply(A,3)
Out[213]:
array(['AAA', 'BBB', 'CCC'],
但不适用于复杂的乘法器。
关于python - Numpy 复数数组乘法给出不支持的操作数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29274229/