如何用反向二进制表示重新索引一个numpy数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用反向二进制表示重新索引一个numpy数组?相关的知识,希望对你有一定的参考价值。

如何改进以下代码?

1)->传递长度为2**n]的一维数组

2)->为数组的每个索引获取二进制表示形式

3)->反转二进制表示形式,并将其用作对应值的新整数索引

示例:

[[56,209,81,42]

[[00,01,10,11](索引的二进制表示)

->反向:[00,10,01,11]

->成为:[56,81,209,42]

代码:

def order_in_reversed_bits(data: np.ndarray) -> np.ndarray:
    tobinary = lambda t: np.binary_repr(t, width=len(np.binary_repr(data.shape[0]-1)))[::-1]
    func = np.vectorize(tobinary)
    a = func(np.arange(0,data.shape[0]))
    t = np.zeros(data.shape,dtype='float64')

    for i,k in enumerate(a):
        t[int(k,2)] = data[i]

    return t

Numpy或Python的哪些内置功能很方便?

如何改进以下代码? 1)->通过一个长度为2 ** n的一维数组2)->为数组的每个索引获取二进制表示形式3)->反转二进制表示形式并使用它...

答案

您可以将sorted与自定义键一起使用,例如:

另一答案

此问题称为bit-reversal permutation。唯一困难的部分是反转索引的二进制表示。 Here,您将找到解决方法。我选择最简单的一个:

以上是关于如何用反向二进制表示重新索引一个numpy数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何用 numpy 编写骰子损失反向传播

Python如何用字符串键索引多维数组,如字典

Numpy:如何用向量元素除以每一行

如何用另一个数组创建或填充一个 numpy 数组?

如何用 numpy/pandas 计算“子矩阵”条目的总和?

将 NumPy 数组矢量化重新标记为连续数字并取回