解压一个 numpy ndarray 的元组并将其添加到一个新的维度

Unpacking a numpy ndarray of tuples and add it in a new dimension

我有一个形状为 (M,N) 的 numpy ndarray x,其中 N 中的每个元素都是一个包含复数的实部和虚部的 2 元素元组。

我想将元组解包到另一个维度,这样我的 x 现在的形状就是 (M,N,2)

我的第一个想法是将实部和虚部分成两个形状为 (M,N) 的 numpy 数组,然后在第二个轴上将它们连接起来,以便获得所需的输出。为此,我尝试仅访问实部和虚部,如下所示

x[:,:][0]
x[:,:][1]

但是,它 returns 是整个数组,而不是 real/imaginary 部分。关于我如何继续的任何指示?

示例数组如下

array([[( 4.82641562, -1.84333128), (-1.29724314,  2.06545141),
        ( 0.02074953, -1.32518303)],
       [(-0.81477981, -3.34148138), ( 0.231383  ,  1.35495823),
        ( 1.66341462, -1.33603417)],
       [( 2.2809137 , -1.17720382), (-1.05115026, -2.09556016),
        ( 1.57932884, -0.7438237 )],
       [(-2.2170903 ,  0.81147059), ( 0.17489367,  0.15123805),
        (-1.95151614, -0.5669619 )],
       [(-2.16413158,  0.44555251), ( 1.2545366 , -0.06933326),
        ( 1.08469658,  1.71108236)],
       [(-0.99776606, -0.0607623 ), (-0.11785624, -1.90687216),
        ( 1.28964911, -1.03083365)],
       [( 1.65550362, -1.26383881), ( 0.13404437,  1.4402823 ),
        ( 0.04223597, -1.00992713)],
       [(-0.4696885 ,  2.66014003), (-1.12157114, -1.03019938),
        ( 2.6312301 ,  0.22770433)],
       [( 1.74457246, -0.91478885), (-0.18861201,  0.75360561),
        ( 0.27141119,  0.71356903)],
       [(-0.15940566,  1.26613812), ( 1.28238354,  1.31858431),
        ( 0.31217745,  0.13244299)]],
      dtype=[('real', '<f8'), ('imag', '<f8')])

您可以方便地将数组设置为 structured array,这意味着您可以使用每个字段的字符串名称访问实部和虚部:

arr['real']
arr['imag']

例如:

>>> arr['real']
array([[ 4.82641562, -1.29724314,  0.02074953],
       [-0.81477981,  0.231383  ,  1.66341462],
       [ 2.2809137 , -1.05115026,  1.57932884],
       [-2.2170903 ,  0.17489367, -1.95151614],
       [-2.16413158,  1.2545366 ,  1.08469658],
       [-0.99776606, -0.11785624,  1.28964911],
       [ 1.65550362,  0.13404437,  0.04223597],
       [-0.4696885 , -1.12157114,  2.6312301 ],
       [ 1.74457246, -0.18861201,  0.27141119],
       [-0.15940566,  1.28238354,  0.31217745]])

>>> arr['imag']
array([[-1.84333128,  2.06545141, -1.32518303],
       [-3.34148138,  1.35495823, -1.33603417],
       [-1.17720382, -2.09556016, -0.7438237 ],
       [ 0.81147059,  0.15123805, -0.5669619 ],
       [ 0.44555251, -0.06933326,  1.71108236],
       [-0.0607623 , -1.90687216, -1.03083365],
       [-1.26383881,  1.4402823 , -1.00992713],
       [ 2.66014003, -1.03019938,  0.22770433],
       [-0.91478885,  0.75360561,  0.71356903],
       [ 1.26613812,  1.31858431,  0.13244299]])

您可以尝试使用以下代码

[x[0] for x in arr]

实部虚部

[x[1] for x in arr]