1

假设我有

>>> np.array([[0,0],[0,1],[1,0],[1,1]])
array([[0, 0],
       [0, 1],
       [1, 0],
       [1, 1]])

这是一个矩阵,它的每一行都可以看作是某个数的二进制表示,所以它是

>>> np.array([[0],[1],[2],[3]])
array([[0],
       [1],
       [2],
       [3]])

如何在 Python 中以最短的方式计算这种转换?

4

1 回答 1

2

您可以使用matrix-multiplicationwithnp.dot使用适当的 2 次幂数字对每一列进行元素缩放,然后对每一行进行求和,从而使我们采用几种方法 -

a.dot(2**np.arange(a.shape[1]-1,-1,-1))
a[:,::-1].dot(2**np.arange(a.shape[1]))
a.dot(1 << np.arange(a.shape[1])[::-1])

样品运行 -

In [557]: a = np.array([[0,0],[0,1],[1,0],[1,1]])

In [558]: a.dot(2**np.arange(a.shape[1]-1,-1,-1))
Out[558]: array([0, 1, 2, 3])

In [559]: a[:,::-1].dot(2**np.arange(a.shape[1]))
Out[559]: array([0, 1, 2, 3])

In [566]: a.dot(1 << np.arange(a.shape[1])[::-1])
Out[566]: array([0, 1, 2, 3])
于 2017-07-26T20:45:16.517 回答