循环n-d np.array的最有效方法

时间:2016-03-26 11:25:02

标签: python arrays performance numpy vectorization

1。引言

假设有一个形状为(365,100,100)的三维数组: Prec

  • 它代表一年中一个地区的日降水量。
  • 显然,第一个维度代表时间序列。
  • 最后2个维度代表空间分布(例如,1千米x 1公里有10000个网格)

2。尝试

测试每个网格的整个区域是否其沉淀超过一定值Pd分开干燥和湿润。我想把这一年的干燥日总结一下。

3。我的代码

freq = np.zeros(100,100).reshape(100,100)
Pd = xxx
for i in range(0,prec.shape[0],1):
    for j in range(0,prec.shape[1],1):
        for k in range(0,prec.shape[2],1):   
            if prec[i,j,k] < Pd:
               freq[j,k] +=1

我认为太多的循环必须浪费时间。是否有一些最简洁的方法来实现类似的工作? 任何建议都会很感激!

1 个答案:

答案 0 :(得分:2)

您正在prec的第一轴进行比较和求和。可以使用NumPy broadcasting以矢量化方式执行该比较,然后沿着第一个轴与.sum(0)求和,就像这样 -

freq = (prec < Pd).sum(0)