我得到了一个矩阵a,以下字节作为行:
11111110 (0xfe)
11111000 (0xf8)
10000100 (0x84)
10010010 (0x92)
我的程序用函数sys.stdin.read(1)
从stdin读取一个字节。假设我收到字节x10101010 (0xaa)
。有没有使用numpy执行乘法的方法:
由于A
是一个4x8矩阵,由4个字节组成行,而x
是一个8位数组,所以我期望接收(半字节{0000 0110
,这是乘法的结果A * x
,将位视为矩阵的元素。在
如果矩阵的元素被视为二进制字节,结果将是:
>>> A = np.array([[1,1,1,1,1,1,1,0],[1,1,1,1,1,0,0,0],[1,0,0,0,0,1,0,0],[1,0,0,1,0,0,1,0]])
>>> x = np.array([1,0,1,0,1,0,1,0])
>>> A.dot(x)%2
array([0, 1, 1, 0])
1。不使用
dot
你不需要完全展开你的矩阵来进行按位“乘法”。您希望将
^{pr2}$A
视为4x8位矩阵,x
视为8元位向量。行乘法对于A
和x
中均为on的位生成1,如果其中任何一位为0,则为0。这相当于应用按位and(&
):Here是对字节中的位进行计数的post。
bin(n).count("1")
可能是最容易使用的,所以如果你只想要一个数字,你可以做一些类似的事情
2。使用
dot
要使用}扩展为它们的numpy等价物:
dot
,可以很容易地将A
和{您可以将
dot
应用于结果:相关问题 更多 >
编程相关推荐