我只想将base-2二进制数字串转换为int,如下所示:
>>> '11111111'.fromBinaryToInt()
255
Run Code Online (Sandbox Code Playgroud)
有没有办法在Python中执行此操作?
unw*_*ind 502
您使用内置int
函数,并将其传递给输入数字的基数,即2
二进制数:
>>> int('11111111', 2)
255
Run Code Online (Sandbox Code Playgroud)
len*_*ehx 32
只需在python交互界面中键入0b11111111:
>>> 0b11111111
255
Run Code Online (Sandbox Code Playgroud)
Ale*_*lds 26
另一种方法是使用bitstring
模块:
>>> from bitstring import BitArray
>>> b = BitArray(bin='11111111')
>>> b.uint
255
Run Code Online (Sandbox Code Playgroud)
请注意,无符号整数与有符号整数不同:
>>> b.int
-1
Run Code Online (Sandbox Code Playgroud)
该bitstring
模块不是必需的,但它有许多高性能的方法,用于将输入转换为位或从位转换为其他形式,以及操作它们.
使用int with base是正确的方法.在我发现int也使用base之前我曾经这样做过.它基本上是对列表的理解,应用于将二进制转换为十进制的原始方式(例如110 = 2**0*0 + 2**1*1 + 2**2*1)
add = lambda x,y : x + y
reduce(add, [int(x) * 2 ** y for x, y in zip(list(binstr), range(len(binstr) - 1, -1, -1))])
Run Code Online (Sandbox Code Playgroud)
如果你想知道幕后发生了什么,那么你就去吧。
class Binary():
def __init__(self, binNumber):
self._binNumber = binNumber
self._binNumber = self._binNumber[::-1]
self._binNumber = list(self._binNumber)
self._x = [1]
self._count = 1
self._change = 2
self._amount = 0
print(self._ToNumber(self._binNumber))
def _ToNumber(self, number):
self._number = number
for i in range (1, len (self._number)):
self._total = self._count * self._change
self._count = self._total
self._x.append(self._count)
self._deep = zip(self._number, self._x)
for self._k, self._v in self._deep:
if self._k == '1':
self._amount += self._v
return self._amount
mo = Binary('101111110')
Run Code Online (Sandbox Code Playgroud)
对于大型矩阵(10**5 行及以上),最好使用矢量化 matmult。一次传递所有行和列。它非常快。这里python没有循环。我最初设计它的目的是将 MovieLens 中 10 个不同流派列的许多二进制列(例如 0/1)转换为每个示例行的单个整数。
def BitsToIntAFast(bits):
m,n = bits.shape
a = 2**np.arange(n)[::-1] # -1 reverses array of powers of 2 of same length as bits
return bits @ a
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
353215 次 |
最近记录: |