np.ndarray bitwise_or ndarrays 运算符失败

np.ndarray bitwise_or operator on ndarrays fails

我想初始化一个只能包含 0 或 1 的大小为 (n,m) 的 numpy 数组。 此外,我想稍后使用数组 np.bitwise_or。

例如,如果我尝试:

import numpy as np
myArray = np.zeros([4,4])
myRow = myArray[1,]
myCol = myArray[,1]
np.bitwise_or(myRow, myCol)

失败:

TypeError: ufunc 'bitwise_or' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

我怎样才能以类似的方式做到这一点而不出错?

如果我尝试,

np.bitwise_or([0,0,0,0], [0,0,0,0])

它确实有效。

默认情况下,np.zeros 将使用 float 数据类型,您不能对 float 执行按位运算。 np.bitwise_or([0,0,0,0], [0,0,0,0]) 作用于整数,这就是它起作用的原因。

如果你在构造 myArray 时传递一个整数数据类型,它也会起作用:

In [9]: myArray = np.zeros([4,4], dtype=int)

In [10]: myRow = myArray[1,:]

In [11]: myCol = myArray[:,1]

In [12]: np.bitwise_or(myRow, myCol)
Out[12]: array([0, 0, 0, 0])

或者我们可以调用 astype(int):

In [14]: myArray = np.array([[1.0,0.0,1.0,0.0], [1.0,1.0,1.0,0.0]])

In [15]: np.bitwise_or(myArray[0].astype(int), myArray[1].astype(int))
Out[15]: array([1, 1, 1, 0])

就是说,如果您知道数组总是只包含 0 或 1,则应该考虑使用 bool 数组:

In [21]: myArray = myArray.astype(bool)

In [22]: np.bitwise_or(myArray[0], myArray[1])
Out[22]: array([ True,  True,  True, False], dtype=bool)