簡體   English   中英

迭代和訪問numpy數組元素的最快方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM