【问题标题】:Numpy arrays: multi conditional assignmentNumpy数组:多条件赋值
【发布时间】:2021-06-17 19:36:23
【问题描述】:

我有两个 Numpy 数组如下:

>>> x
array([[0, 3, 3],
       [3, 3, 3],
       [0, 3, 3]])
>>> y
array([[0, 0, 0],
       [0, 2, 2],
       [0, 2, 2]])

比较xy,我希望比较结果根据以下条件赋值:

  1. 如果x y 值不为零,则分配较低的
  2. 如果x y 为零,则分配非零值
  3. 如果x y 为零,则赋值为0

所以参考上面的例子,我希望结果是:

>>> result
array([[0, 3, 3],
       [3, 2, 2],
       [0, 2, 2]])

注意:数组大小是可变的。我只以3 x 3 数组为例。 xy 将具有相同的大小。

如何使用 Numpy 进行这种替换/赋值操作?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    您可以使用内置选择进行多条件替换:

    np.select([(x!=0)&(y!=0), (x==0)!=(y==0), (x==0)&(y==0)],[np.minimum(x,y), x+y, 0])
    

    输出:

    array([[0, 3, 3],
           [3, 2, 2],
           [0, 2, 2]])
    

    虽然您可以将此多条件转换为单个条件,并在最后两个条件中使用加法,但输出相同:

    np.where((x!=0)&(y!=0), np.minimum(x,y), x+y)
    

    【讨论】:

      【解决方案2】:

      这里有一个解决方案:

      tmp = np.where(x == 0, y, x) # Rule 2 and 3
      result = np.where((x != 0) & (y != 0), np.minimum(x, y), tmp) # Rule 1
      

      result 中的输出:

      array([[0, 3, 3],
             [3, 2, 2],
             [0, 2, 2]])
      

      【讨论】:

        猜你喜欢
        • 2023-03-17
        • 1970-01-01
        • 2018-11-06
        • 2011-03-04
        • 2013-02-08
        • 1970-01-01
        • 1970-01-01
        • 2020-07-31
        • 1970-01-01
        相关资源
        最近更新 更多