如何将二进制数字行堆栈转换为 Python 中的值列?
How to convert stack of rows of binary digits into column of values in Python?
假设我有
>>> 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中以最短的方式计算这个变换?
您可以将 matrix-multiplication
与 np.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])
假设我有
>>> 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中以最短的方式计算这个变换?
您可以将 matrix-multiplication
与 np.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])