Assigning complex values to numpy arrays?

后端 未结 3 1513
北海茫月
北海茫月 2020-12-09 17:25

This gives the expected result

x = random.rand(1) + random.rand(1)*1j
print x.dtype
print x, x.real, x.imag

and this works

         


        
相关标签:
3条回答
  • 2020-12-09 18:10

    To insert complex x or x + something into C, you apparently need to treat it as if it were an array, so either index into x or assign it to a slice of 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]])
    

    It looks like NumPy isn't handling this case correctly. Consider submitting a bug report.

    0 讨论(0)
  • 2020-12-09 18:14

    Actually, none of the proposed solutions worked in my case (Python 2.7.6, NumPy 1.8.2). But I've found out, that change of dtype from complex (standard Python library) to numpy.complex_ may help:

    >>> 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]])
    
    0 讨论(0)
  • 2020-12-09 18:23

    I used astype to change the type to complex and it worked in my case (Python 3), although I am not sure whether it is the best way. One example:

    import numpy as np
    c2 = np.empty([2,2]).astype(complex)
    c2[0] = 5j+2
    
    0 讨论(0)
提交回复
热议问题