繁体   English   中英

在 numpy 阵列上进行条件循环?

[英]Conditionnal Loop over a numpy array?

我是 Python 的初学者,我通常在 C 中编程。

所以,我有一个 numpy 二维数组。 我对 (i,j),(i+1,j),(i,j+1) 和 (i+1,j+1) 值求平均值,如果它高于所选值,我将其求和.

这是我的 python 代码:

Z=np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])
sum=0.
value=7.
for i in range(np.shape(Z)[0]-1):
    for j in range(np.shape(Z)[1]-1):
        a = (Z[i,j] + Z[i+1,j] + Z[i,j+1] + Z[i+1,j+1]) / 4
        if (a>=value):
            sum+=a
print (sum)

我知道这听起来不太像pythonic。 如何以 pythonic 的方式编写它来加速大型 2D numpy 数组上的代码?

感谢您的回答

我会这样做:

quads = Z[:-1,:-1] + Z[1:,:-1] + Z[:-1,1:] + Z[1:,1:]
sum = quads[quads >= value * 4].sum() / 4

第一行计算 2x2 元素和的整个 (x-1,y-1) 数组:

array([[16, 20, 24, 28],
       [36, 40, 44, 48]])

第二行将这 8 个元素中的每一个与value * 4进行比较,而不是除以quads / 4 ,这会不必要地创建另一个相同大小的数组。 这让我们可以在最后做一个标量乘法和一个标量除法,而不是数组除法。 但是如果你不关心优化,你也可以这样写:

quads /= 4
sum = quads[quads >= value].sum()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM