如何在2D numpy数组上执行行式OR运算?

时间:2017-06-21 08:58:45

标签: python numpy

我有一个numpy数组。

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

我想对它执行rowise OR操作,以便生成的数组如下所示:

[1, 0, 1]

如果没有实现循环,是否有直接的方法? 如果有人可以提出建议,我将非常感激。感谢

2 个答案:

答案 0 :(得分:3)

您可以通过调用any生成布尔掩码然后转换为int以将TrueFalse转换为1和{{}}来执行此操作分别为{1}}:

0

In[193]: a.any(0).astype(int) Out[193]: array([1, 0, 1]) 的第一个参数是轴arg,这里我们可以看到轴0和1之间的差异:

any

答案 1 :(得分:2)

如果你更喜欢按位或者(Python中的| operator是按位的,或者or operator是布尔值或者),你可以使用np.bitwise_or()。但是,这只需要两个数组作为输入,因此您可以使用Numpy的reduce()功能来组合数组中的所有子数组。

>>> a = np.array([[1, 0, 1],[1, 0, 0],[0, 0, 1]])
>>> np.bitwise_or.reduce(a, 0)
array([1, 0, 1])

我喜欢这是多么明确,但a.any()解决方案很常见,不会引起任何疑虑。 reduce的第一个参数当然是array,第二个参数是你要减少的axis。所以你也可以按列进行,如果你愿意,或者任何其他轴。

>>> a = np.array([[1, 0, 1],[1, 0, 0],[0, 0, 1]])
>>> np.bitwise_or.reduce(a, 1)
array([1, 1, 1])