【问题标题】:Efficient way to untranspose the bit of an integer array?取消转置整数数组位的有效方法?
【发布时间】:2016-06-16 15:29:27
【问题描述】:

考虑 3 个 2 位整数,存储在一个数组中

x1 = [ 
    ad,
    be,
    cf,
]

上面显示了整数及其位,但它们存储为常规int
数组x1是整数x = abcdef的转置。

如何反调x1得到

x2 = [ 
    ab,
    cd,
    ef,
]

数组x2 只是自然顺序的x

在 python 中执行此操作的有效方法是什么?

我的最终目标是在整数之间进行比较。
所以给定整数ab 存储为x1,我想知道a > b,通过查看a1b1
任何实现这一目标的方法,也是一个很好的答案。

我可以使用整数的字符串表示,但我想使用一些位移魔法。

这个问题与Efficient way to transpose the bit of an integer in python?相反

【问题讨论】:

  • 您的问题不清楚——您是否有一个长度为 3 的 Python 列表,其中包含 3 个长度为 2 的 Python 列表,并且您想像所示那样对这些元素进行洗牌,或者您有0 到 3 范围内的三个整数,您认为它们对应于一个矩阵,并且您想从中获取另一个 3(或者是 1?)整数的集合。请明确输入的形式和所需输出的形式。
  • @JohnColeman 谢谢。
  • 这听起来像是一个有趣的问题,但我不想花太多时间去思考它,然后才能更好地了解问题到底是什么。

标签: python bit-manipulation


【解决方案1】:

这是一种方法:

def untranspose(arr):
    x,y,z = arr
    a,d = divmod(x,2)
    b,e = divmod(y,2)
    c,f = divmod(z,2)
    return f + 2*e + 4*d + 8*c + 16*b + 32*a

例如,

>>> untranspose([1,3,2])
30

[1,3,2]对应

01
11
10

所以你想要整数 011110:

>>> int('011110',2)
30

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-02
    • 2019-01-06
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多