python - Numpy 复数数组乘法给出不支持的操作数类型

标签 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 个元素,但这应该不重要?

最佳答案

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 的类型,而不是 Adtype >。这是一条解释器错误消息,而不是 numpy 错误消息。

<小时/>

有一个可以处理字符串的 multiply 版本:

In [213]: np.char.multiply(A,3)
Out[213]: 
array(['AAA', 'BBB', 'CCC'], 

但不适用于复杂的乘法器。

关于python - Numpy 复数数组乘法给出不支持的操作数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29274229/

相关文章:

python - 使用 Windows 在 Sublime Text 的控制台中打印 utf8 字符串

python - 为 emacs 更改 python 解释器

c++ - 无法填充 C++ 数组,每个索引处只有最后一项

java - 将二维字符串数组保存在 .text 文件中并从中加载

java - 使用 numpy.fromfile 在 Python 中使用 ObjectOutputStream 读取用 Java 编写的 double 的二进制文件

python - 为 32 位和 64 位编写 cython?

python - Mac 上 Python 全局库的位置?

python - 远程服务器上的 Node 错误 spawn/bin/sh ENOENT

c++ - 如何识别代码中const char*和const char[]的类型?

python - Numpy - 将数据分组为总和值