时间: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?
2023-03-17
python flask项目打包成docker镜像发布的过程2023-03-17
python调试模块ipdb详解2023-03-17
python使用openai生成图像的超详细教程python cron定时任务触发接口自动化巡检 apscheduler报错:Run time of job …… next run at: ……)” was missed by misfire_grace_time参数 找到任务超时的根本原因...
2023-03-15