系统城装机大师 - 唯一官网:www.pcxitongcheng.com!

当前位置:首页 > 脚本中心 > python > 详细页面

python中的Numpy二维数组遍历与二维数组切片后遍历效率比较

时间:2022-03-01来源:www.pcxitongcheng.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?

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载