如果z
是64位的浮點值的numpy的陣列,並且在z
的數據是連續的(例如,你沒有通過從更大的陣列切片它形成z
),則可以創建一個複雜視圖z
與沒有複製:
In [56]: z
Out[56]: array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
In [57]: z.view(np.complex128)
Out[57]: array([ 0.+1.j, 2.+3.j, 4.+5.j, 6.+7.j, 8.+9.j])
爲了完整起見,這裏是你的Matlab代碼更直接(且效率較低)的翻譯。它產生一個拷貝:
In [63]: z[::2] + z[1::2]*1j
Out[63]: array([ 0.+1.j, 2.+3.j, 4.+5.j, 6.+7.j, 8.+9.j])
甲創建副本更冗長,但更有效的方法是:
In [73]: w = np.empty(len(z)//2, dtype=np.complex128)
In [74]: w.real = z[::2]
In [75]: w.imag = z[1::2]
In [76]: w
Out[76]: array([ 0.+1.j, 2.+3.j, 4.+5.j, 6.+7.j, 8.+9.j])
(I用於len(z)//2
用於w
大小這假定z
被一維陣列)。