我有一个numpy数组。
我希望对它执行逐行或操作,以使结果数组如下所示:
[[1, 0, 1],
[1, 0, 0],
[0, 0, 1]]
我希望对它执行逐行或操作,以使结果数组如下所示:
[1, 0, 1]
。是否有不需要实现循环的简单方法?如果有人能提供建议,我将非常感激。谢谢。any
生成布尔掩码,然后将其转换为int
来将True
和False
分别转换为1
和0
。In[193]:
a.any(0).astype(int)
Out[193]: array([1, 0, 1])
< p > any
的第一个参数是轴参数,这里我们可以看到轴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)
|
运算符是按位或,而or
运算符是布尔或),你可以使用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])
np.bitwise_or.reduce(a, 0)
更加明确,但你比我快30秒回答了这个问题。 - Daniel F
b = a[0,:] | a[1,:] | a[2,:]
,其中a是numpy数组。这个方法效果不错,但我正在寻找更精确、更紧凑的方法。 - deepayan das