我有一个numpy数组。如何在二维numpy数组上执行按行OR操作?
[[1, 0, 1],
[1, 0, 0],
[0, 0, 1]]
我要对其执行rowise OR操作,从而导致数组是这样的:
[1, 0, 1]
是否有这样做没有实现循环一个直接的方式? 如果有人可以提出建议,我将非常感激。由于
我有一个numpy数组。如何在二维numpy数组上执行按行OR操作?
[[1, 0, 1],
[1, 0, 0],
[0, 0, 1]]
我要对其执行rowise OR操作,从而导致数组是这样的:
[1, 0, 1]
是否有这样做没有实现循环一个直接的方式? 如果有人可以提出建议,我将非常感激。由于
如果您希望坚持按位或者(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])
嘿谢谢,@亚历山大雷诺兹,这正是我正在寻找的 –
在30秒内打败我回答这个问题。尽管我会使用'np.bitwise_or.reduce(a,0)'来更加明确。 –
@DanielF我同意,我将补充说。谢谢! –
你可以通过调用any
产生boolean值面具,然后转换为int
到True
和False
到1
和0
分别将做到这一点:
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)
'b = a [0,:] | a [1,:] | a [2 ,:]其中a是numpy数组。这工作得很好。我正在寻找更精确和紧凑的东西。 –