0

我想初始化一个只能包含零或一的大小为 (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])

它确实有效。

4

1 回答 1

6

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

如果你在构造时传递一个整数 dtype 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)
于 2016-11-18T01:52:20.953 回答