【问题标题】:how to calculate a 2D array with numpy mask如何使用 numpy 掩码计算二维数组
【发布时间】:2015-06-14 08:23:29
【问题描述】:

我有一个二维数组,如果值大于 0,我想做一个操作(例如 x+1)。 在普通的python中是这样的:

a = [[2,5], [4,0], [0,2]]
for x in range(3):
    for y in range(2):
        if a[x][y] > 0:
            a[x][y] = a[x][y] + 1 

a 的结果是 [[3, 6], [5, 0], [0, 3]]。这就是我想要的。

现在我想阻止嵌套循环并尝试使用 numpy 类似的东西:

a = np.array([[2,5], [4,0], [0,2]])
mask = (a > 0)
a[mask] + 1

结果现在是一维数组[3 6 5 3]的形状。我怎样才能做这个操作并且不会像之前的普通 python 示例那样丢失维度?

【问题讨论】:

    标签: python arrays numpy vectorization


    【解决方案1】:

    如果a是一个numpy数组,你可以简单地做-

    a[a>0] +=1
    

    示例运行 -

    In [335]: a = np.array([[2,5], [4,0], [0,2]])
    
    In [336]: a
    Out[336]: 
    array([[2, 5],
           [4, 0],
           [0, 2]])
    
    In [337]: a[a>0] +=1
    
    In [338]: a
    Out[338]: 
    array([[3, 6],
           [5, 0],
           [0, 3]])
    

    【讨论】:

    • 谢谢!使用掩码将是 a[mask] = a[mask]+ 1 对吗?
    • @gustavgans a>0 是掩码。所以它相当于a[mask] += 1+= 是原地更改。另一种更明确的表达方式就像您所做的那样:a[mask] = a[mask]+ 1.
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多