ndarrays上的np.ndarray bitwise_or运算符失败

时间:2016-11-18 01:46:31

标签: python numpy numpy-ufunc

我想初始化一个只能包含0或1的numpy数组(n,m)。 此外,我想稍后使用数组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])

它确实有效。

1 个答案:

答案 0 :(得分:4)

默认情况下,np.zeros将使用float dtype,并且您无法对浮点数执行按位运算。 np.bitwise_or([0,0,0,0], [0,0,0,0])对整数起作用,这就是它起作用的原因。

如果在构造myArray时传递整数dtype,它也会起作用:

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)