计算大于numpy2d数组的最佳方法

2024-04-25 12:21:27 发布

您现在位置:Python中文网/ 问答频道 /正文

结果是大小为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代码尽可能快呢?你知道吗


Tags: 代码innumpyforsizeifcountnp
3条回答

您可以尝试以下方法:

np.bincount(results[:,0]>=.7)[1]

不确定它是否更快,但应该能给出正确的答案

试试看

first_col=results[:,0]
res =len(first_col[first_col>.7])

根据矩阵的形状,这可能比你的方法快2-10倍。你知道吗

在进行数值计算以提高速度时,尤其是在Python中,如果可能的话,永远不要使用for循环。Numpy针对“矢量化”计算进行了优化,因此您希望将通常用于循环的工作传递给特殊的Numpy索引和函数,如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。希望这有帮助!你知道吗

相关问题 更多 >