如果我的行中的元素也为零,如何将整行设置为零?

时间:2018-04-28 04:27:36

标签: python numpy

我有一个看起来像这样的矩阵

a = np.random.rand(2, 2, 2)

[[[1 0]
  [1 1]]

 [[1  1]
  [1 0]]]

我想使用numpy在此矩阵中设置0到0的任何行。所以在这种情况下, 看起来像这样,

[[[0 0]
  [1 1]]

 [[1  1]
  [0 0]]]

有人可以给我一个提示吗?

2 个答案:

答案 0 :(得分:1)

0比较并在最后一个轴ANY(或此特定axis=-1案例中的第三轴axis=2)中查找3D匹配,然后使用这个mask分配零 -

a[(a==0).any(axis=-1)] = 0

示例运行 -

In [16]: a
Out[16]: 
array([[[1, 0],
        [1, 1]],

       [[1, 1],
        [1, 0]]])

In [17]: a[(a==0).any(-1)] = 0

In [18]: a
Out[18]: 
array([[[0, 0],
        [1, 1]],

       [[1, 1],
        [0, 0]]])

答案 1 :(得分:0)

只是为了好玩,这是一个替代版本(使用零值):

>>> a
array([[[1, 0],
        [1, 1]],

       [[1, 1],
        [0, 1]]])
>>> a.all(axis=-1,keepdims=True)*a
array([[[0, 0],
        [1, 1]],

       [[1, 1],
        [0, 0]]])