2017-06-21 94 views
1

我有一个numpy数组。如何在二维numpy数组上执行按行OR操作?

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

我要对其执行rowise OR操作,从而导致数组是这样的:

[1, 0, 1]

是否有这样做没有实现循环一个直接的方式? 如果有人可以提出建议,我将非常感激。由于

+0

'b = a [0,:] | a [1,:] | a [2 ,:]其中a是numpy数组。这工作得很好。我正在寻找更精确和紧凑的东西。 –

回答

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]) 
+0

嘿谢谢,@亚历山大雷诺兹,这正是我正在寻找的 –

+2

在30秒内打败我回答这个问题。尽管我会使用'np.bitwise_or.reduce(a,0)'来更加明确。 –

+0

@DanielF我同意,我将补充说。谢谢! –

3

你可以通过调用any产生boolean值面具,然后转换为intTrueFalse10分别将做到这一点:

In[193]: 
a.any(0).astype(int) 

Out[193]: array([1, 0, 1]) 

的第一个参数来any是轴ARG ,在这里我们可以看到轴0和1之间的差异:

In[194]: 
a.any(0) 

Out[194]: array([ True, False, True], dtype=bool) 

In[195]: 
a.any(1) 

Out[195]: array([ True, True, True], dtype=bool)