gib*_*son 13 python arrays numpy
这给出了预期的结果
x = random.rand(1) + random.rand(1)*1j
print x.dtype
print x, x.real, x.imag
Run Code Online (Sandbox Code Playgroud)
这很有效
C = zeros((2,2),dtype=complex)
C[0,0] = 1+1j
print C
Run Code Online (Sandbox Code Playgroud)
但如果我们改变它
C[0,0] = 1+1j + x
Run Code Online (Sandbox Code Playgroud)
我得到"TypeError:无法将复数转换为浮点数".
如果我们现在省略显式dtype = complex,我得到"ValueError:设置一个带序列的数组元素".
有人可以解释发生了什么,以及如何做到这一点没有错误?我迷路了.
小智 26
实际上,在我的案例中没有提出的解决方案(Python 2.7.6,NumPy 1.8.2).但我发现,dtype从complex(标准Python库)改变numpy.complex_可能会有所帮助:
>>> import numpy as np
>>> x = 1 + 2 * 1j
>>> C = np.zeros((2,2),dtype=np.complex_)
>>> C
array([[ 0.+0.j, 0.+0.j],
[ 0.+0.j, 0.+0.j]])
>>> C[0,0] = 1+1j + x
>>> C
array([[ 2.+3.j, 0.+0.j],
[ 0.+0.j, 0.+0.j]])
Run Code Online (Sandbox Code Playgroud)
要插入complex x或x + somethinginto C,您显然需要将其视为数组,因此要么x将其索引到或分配给切片C:
>>> C
array([[ 0.+0.j, 0.+0.j],
[ 0.+0.j, 0.+0.j]])
>>> C[0, 0:1] = x
>>> C
array([[ 0.47229555+0.7957525j, 0.00000000+0.j ],
[ 0.00000000+0.j , 0.00000000+0.j ]])
>>> C[1, 1] = x[0] + 1+1j
>>> C
array([[ 0.47229555+0.7957525j, 0.00000000+0.j ],
[ 0.00000000+0.j , 1.47229555+1.7957525j]])
Run Code Online (Sandbox Code Playgroud)
看起来NumPy没有正确处理这种情况.考虑提交错误报告.