系統城裝機大師 - 唯一官網:www.farandoo.com!

當前位置:首頁 > 腳本中心 > python > 詳細頁面

python中的Numpy二維數組遍歷與二維數組切片后遍歷效率比較

時間:2022-03-01來源:www.farandoo.com作者:電腦系統城

python-numpy使用中,可以用雙層 for循環對數組元素進行訪問,也可以切片成每一行后進行一維數組的遍歷。

代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np
import time
NUM = 160
 
 
a=np.random.random((NUM,NUM))
start = time.time()
for i in range(NUM):
    for j in range(NUM):
        if a[i][j] == 1.0:
            pass
end1 =  time.time()
 
for ii in range(NUM):
    b = a[ii,:]
    for jj in range(NUM):
        if b[jj] == 1.0:
            pass 
end2 =  time.time()
print("end1",end1-start)
print("end2",end2-end1)

由于生成的是[0,1)中的數,因此兩種操作會遍歷所有的元素。多輪測試后,耗時如下:

當NUM為160時:

end1 0.006983518600463867
end2 0.003988742828369141

當NUM為1600時:

end1 0.71415114402771
end2 0.45178747177124023

結論:切片后遍歷更快
原因:
樓主還暫不明確

一個想法:

1 b=a[ii,:]

在numpy中,為了提高效率,這種切片出來的子矩陣其實都是原矩陣的引用而已,所以改變子矩陣,原矩陣還是會變的
所以在內層循環中,第二種方法是在那一行元素所在的內存進行尋找。而第一種方法是先定位到行,再定位到列,所以比較慢?
大家是怎么想的呢?

關于numba在小數據量下的速度慢于普通操作

什么是numba?

分享到:

相關信息

系統教程欄目

欄目熱門教程

人氣教程排行

站長推薦

熱門系統下載

jlzzjlzz亚洲乱熟在线播放