[英]Fastest way of iterating and accessing elements of numpy array?
我正在嘗試實現一個MATLAB代碼,它使用數組的向量化迭代和訪問元素。 代碼段如下:
z=z(1:2:end)+j*z(2:2:end);
其中“z”是包含I / Q流值的數組,即交替i&q,如“iqiqiqiq ...”。 我試圖使用numpy數組實現它,但沒有成功。
注意:還要尋找有關實現上述邏輯的任何其他方法的建議,這比使用numpy數組和python-3.x復制MATLAB方法更快。
如果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])
(我用len(z)//2
表示w
的大小。這假設z
是一維數組。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.