我有一个numpy数组。
[[1, 0, 1],
[1, 0, 0],
[0, 0, 1]]
我想对它执行rowise OR操作,以便生成的数组如下所示:
[1, 0, 1]
如果没有实现循环,是否有直接的方法? 如果有人可以提出建议,我将非常感激。感谢
答案 0 :(得分:3)
您可以通过调用any
生成布尔掩码然后转换为int
以将True
和False
转换为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])