Numpy复数数组乘法提供不受支持的操作数类型

时间:2015-03-26 08:48:24

标签: python arrays numpy

这是有效的:

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个元素,但这不重要吗?

1 个答案:

答案 0 :(得分:2)

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的类型,而不是dtype的{​​{1}}。这是一个解释器错误消息,而不是A消息。


numpy版本可以使用字符串:

multiply

但不是复杂的乘数。