2024-04-25 12:21:27 发布
网友
结果是大小为300000的2d numpy数组
for i in range(np.size(results,0)): if results[i][0]>=0.7: count+=1
这个Python代码需要0.7秒,但是我用C++代码运行,它需要不到0.07秒。 那么如何使这个python代码尽可能快呢?你知道吗
您可以尝试以下方法:
np.bincount(results[:,0]>=.7)[1]
不确定它是否更快,但应该能给出正确的答案
试试看
first_col=results[:,0] res =len(first_col[first_col>.7])
根据矩阵的形状,这可能比你的方法快2-10倍。你知道吗
在进行数值计算以提高速度时,尤其是在Python中,如果可能的话,永远不要使用for循环。Numpy针对“矢量化”计算进行了优化,因此您希望将通常用于循环的工作传递给特殊的Numpy索引和函数,如where。你知道吗
where
我在一个300000x600的数组上做了一个快速测试,数组的随机值从0到1,结果如下。你知道吗
您的代码,非矢量化,带有一个for循环:每次运行226 ms
%%timeit count = 0 for i in range(np.size(n,0)): if results[i][0]>=0.7: count+=1
emilaz解决方案:每次运行8.36毫秒
%%timeit first_col = results[:,0] x = len(first_col[first_col>.7])
伊桑溶液:每次运行7.84毫秒
%%timeit np.bincount(results[:,0]>=.7)[1]
我想到了最好的每次运行6.92毫秒
%%timeit len(np.where(results[:,0] > 0.7)[0])
所有4种方法都得到了相同的答案,我的数据是90134。希望这有帮助!你知道吗
您可以尝试以下方法:
不确定它是否更快,但应该能给出正确的答案
试试看
根据矩阵的形状,这可能比你的方法快2-10倍。你知道吗
在进行数值计算以提高速度时,尤其是在Python中,如果可能的话,永远不要使用for循环。Numpy针对“矢量化”计算进行了优化,因此您希望将通常用于循环的工作传递给特殊的Numpy索引和函数,如
where
。你知道吗我在一个300000x600的数组上做了一个快速测试,数组的随机值从0到1,结果如下。你知道吗
您的代码,非矢量化,带有一个for循环:
每次运行226 ms
emilaz解决方案:
每次运行8.36毫秒
伊桑溶液:
每次运行7.84毫秒
我想到了最好的
每次运行6.92毫秒
所有4种方法都得到了相同的答案,我的数据是90134。希望这有帮助!你知道吗
相关问题 更多 >
编程相关推荐