如何使用3d numpy数组的第一个波段作为所有其他波段的虚数值

g07*_*ore 5 python numpy multidimensional-array

我有一个3d numpy数组[[6,7,8],[1,2,3],[1,2,3]],我想使用第一个"band" [6,7,8]作为所有其他"band"的虚数值.这应该是这样的

[[6,7,8],[1+6j,2+7j,3+,8j],[1+6j,2+7j,3+8j]]
Run Code Online (Sandbox Code Playgroud)

有人知道这是怎么回事吗?感谢帮助!

Dan*_*iel 4

通常人们将“第一乐队”称为第一行。

\n\n
>>> arr = np.array([[6,7,8],[1,2,3],[1,2,3]])\n\n#First need a complex datatype.\n>>> arr = arr.astype(np.complex)\n>>> arr\narray([[ 6.+0.j,  7.+0.j,  8.+0.j],\n       [ 1.+0.j,  2.+0.j,  3.+0.j],\n       [ 1.+0.j,  2.+0.j,  3.+0.j]])\n\n# .imag and .real access the real and imaginary parts of the array.\n>>> arr[1:].imag = arr[0].real\n>>> arr\narray([[ 6.+0.j,  7.+0.j,  8.+0.j],\n       [ 1.+6.j,  2.+7.j,  3.+8.j],\n       [ 1.+6.j,  2.+7.j,  3.+8.j]])\n
Run Code Online (Sandbox Code Playgroud)\n\n

跳过多个转换调用和 vstack 可以节省大量时间:

\n\n
arr = np.array([[6,7,8],[1,2,3],[1,2,3]])\n\n%timeit a=arr.astype(np.complex);a[1:].imag = a[0].real\n100000 loops, best of 3: 4.03 \xc2\xb5s per loop\n\n%timeit np.vstack((arr[0,:], arr[1:,:] + arr[0,:] * 1.j))\n10000 loops, best of 3: 25.2 \xc2\xb5s per loop\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于更大的数组:

\n\n
arr = np.random.rand(500,500)\n\n%timeit a=arr.astype(np.complex);a[1:].imag = a[0].real\n1000 loops, best of 3: 898 \xc2\xb5s per loop\n\nIn [13]: %timeit np.vstack((arr[0,:], arr[1:,:] + arr[0,:] * 1.j))\n1000 loops, best of 3: 1.77 ms per loop\n
Run Code Online (Sandbox Code Playgroud)\n\n

差异主要来自vstack必须将 arr 转换为复杂数据类型两次的选项。

\n\n
%timeit arr.astype(np.complex)\n1000 loops, best of 3: 530 \xc2\xb5s per loop\n
Run Code Online (Sandbox Code Playgroud)\n