“二进制”是指“布尔”吗?(为什么在世界上你使用你正在使用的语法??)
import numpy as np
g = np.array([[1, 0, 0, 0, 1, 1],
[0, 1, 0, 1, 0, 1],
[0, 0, 1, 1, 1, 0]], dtype=bool)
h = np.array([[0, 1, 1, 1, 0, 0],
[1, 0, 1, 0, 1, 0],
[1, 1, 0, 0, 0, 1]], dtype=bool)
至于区别,请考虑1 + 1
。在二进制中,你会得到2
( 0b10
)。在布尔表示中,你会得到1
.
所以,如果你想[0, 1] + [0, 1]
成为[1, 0]
,那么你想要二进制。如果你希望它是[0, 1]
,那么你希望它是布尔值。
同样,如果你想[1, 1] + [1, 0]
成为[1, 0, 1]
,那么你希望它是二进制的。如果你希望它是[1, 1]
,那么你希望它是布尔值。
作为您提到的一些操作的示例(使用布尔值):
print 'g * h ...'
print g * h
print 'g * h viewed as integers...'
print (g * h).view(np.int8) # or x.astype(int), but the latter makes a copy
a = np.array([1, 1, 0], dtype=bool)
print 'Matrix multiplication of [1, 1, 0] with g...'
print a.dot(g) # Or we could do g.T.dot(a)
这产生:
g * h ...
[[False False False False False False]
[False False False False False False]
[False False False False False False]]
g * h viewed as integers...
[[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]]
Matrix multiplication of [1, 1, 0] with g...
[ True True False True True True]