2

使用 numpy 并尝试以二进制形式打印 martices:

import numpy

G=numpy.matrix('100011;010101;001110')

H = numpy.matrix('011100;101010;110001')

print G
print H

返回

[[100011]
 [  4161]
 [   584]]
[[  4672]
 [101010]
 [110001]]

我怎样才能将我的矩阵保持为二进制,并且也可以在二进制中进行矩阵运算?谢谢。

4

1 回答 1

3

“二进制”是指“布尔”吗?(为什么在世界上你使用你正在使用的语法??)

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]
于 2012-04-22T21:39:33.930 回答