Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为numpy数组指定复杂值?_Python_Arrays_Numpy - Fatal编程技术网

Python 为numpy数组指定复杂值?

Python 为numpy数组指定复杂值?,python,arrays,numpy,Python,Arrays,Numpy,这给出了预期的结果 x = random.rand(1) + random.rand(1)*1j print x.dtype print x, x.real, x.imag 这是有效的 C = zeros((2,2),dtype=complex) C[0,0] = 1+1j print C 但是如果我们把它改成 C[0,0] = 1+1j + x 我得到“TypeError:无法将复数转换为浮点” 如果我们现在省略显式的dtype=complex,我会得到“ValueError:使用序列设

这给出了预期的结果

x = random.rand(1) + random.rand(1)*1j
print x.dtype
print x, x.real, x.imag
这是有效的

C = zeros((2,2),dtype=complex)
C[0,0] = 1+1j
print C
但是如果我们把它改成

C[0,0] = 1+1j + x
我得到“TypeError:无法将复数转换为浮点”

如果我们现在省略显式的
dtype=complex
,我会得到“ValueError:使用序列设置数组元素”


有人能解释一下发生了什么,以及如何做到这一点而不出错吗?我迷路了。

要在
C
中插入复杂的
x
x+某物
,显然需要将其视为一个数组,因此要么将其索引到
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]])

看起来NumPy没有正确处理这个案子。考虑提交一个bug报告。

< P>实际上,在我的例子中没有提出的解决方案(Python 2.7.6,NoMP1.1.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]])
我曾经将类型更改为complex,在我的例子(Python3)中它也能工作,尽管我不确定这是否是最好的方法。一个例子:

import numpy as np
c2 = np.empty([2,2]).astype(complex)
c2[0] = 5j+2

但是为什么
a=np.arange(4).重塑((2,2));b=np.数组([100]);a[0,0]=b
不会出现这样的错误吗?@zhangxaochen Good Q,也许复杂数组的行为比我想象的还要糟糕。我从不使用这些:)有趣
C[0,0]=random.rand(1)
可以,但是
C[0,0]=random.rand(1)+random.rand(1)*1j
不行。为什么当我们把虚部加进去时,
x
会变成一个数组?我认为复数是python中的一种原生数据类型,不仅仅是通过数组实现的?@gibson
random.rand(1)
是一个数组。@larsmans如果是这样的话,
C[0,0]=random.rand(1)
应该不起作用,但它确实起作用。我还是很困惑。