我想初始化一个只能包含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])
它确实有效。
答案 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)