時間:2022-03-01來源:www.www.newsthatmovesu.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?
2022-03-01
PHP如何從txt文件中讀取數據詳解2022-03-01
分享5個方便好用的Python自動化腳本2021-03-29
Python中pycharm編輯器界面風格修改方法