আমি কেবল একটি বেস -২ বাইনারি সংখ্যার স্ট্রিংকে একটি প্রান্তে রূপান্তর করতে চাই, এরকম কিছু:
>>> '11111111'.fromBinaryToInt()
255
পাইথনে এটি করার কোনও উপায় আছে?
আমি কেবল একটি বেস -২ বাইনারি সংখ্যার স্ট্রিংকে একটি প্রান্তে রূপান্তর করতে চাই, এরকম কিছু:
>>> '11111111'.fromBinaryToInt()
255
পাইথনে এটি করার কোনও উপায় আছে?
উত্তর:
আপনি অন্তর্নির্মিত intফাংশনটি ব্যবহার করুন এবং এটি ইনপুট নম্বরটির বেসটি পাস করুন, যেমন 2বাইনারি সংখ্যার জন্য:
>>> int('11111111', 2)
255
>>>প্রম্পট দ্বারা প্রস্তাবিত হিসাবে ), আপনার মোটেও ব্যবহার printকরার দরকার নেই । ওপির অনুমানমূলক উদাহরণটি তা করেনি। তাই এটি পাইথন 2 এবং 3 এ সত্যই অভিন্ন হওয়া উচিত
এটি করার আরেকটি উপায় হ'ল bitstringমডিউলটি ব্যবহার করে :
>>> from bitstring import BitArray
>>> b = BitArray(bin='11111111')
>>> b.uint
255
নোট করুন যে স্বাক্ষরযুক্ত পূর্ণসংখ্যাটি স্বাক্ষরিত পূর্ণসংখ্যার থেকে পৃথক:
>>> b.int
-1
bitstringমডিউল প্রয়োজন হয় না, কিন্তু এটি অন্যান্য ফর্মগুলিতে মধ্যে এবং বিট থেকে ইনপুট বাঁক, সেইসাথে তাদের সাধিত জন্য performant পদ্ধতি প্রচুর হয়েছে।
বেস সহ ইন্ট ব্যবহার করা সঠিক পথে। আমি 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))])
add = lambda x, y: x + y, int.__add__হ্রাস করার জন্য সরবরাহ করা যেতে পারে। যেমনreduce(int.__add__, ...)
যদি আপনি জানতে চান যে পর্দার আড়ালে কী ঘটছে তবে আপনি এখানে যান।
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')
একটি পুনরাবৃত্ত পাইথন বাস্তবায়ন:
def int2bin(n):
return int2bin(n >> 1) + [n & 1] if n > 1 else [1]
আপনি যদি পাইথন 3.6 ব্যবহার করেন বা তারপরে আপনি রূপান্তরটি করতে এফ স্ট্রিং ব্যবহার করতে পারেন:
বাইনারি থেকে দশমিক:
>>> print(f'{0b1011010:#0}')
90
>>> bin_2_decimal = int(f'{0b1011010:#0}')
>>> bin_2_decimal
90
অষ্টাল হেক্সা এবং বাইনারি থেকে শুরু করে
>>> f'{0b1011010:#o}'
'0o132' # octal
>>> f'{0b1011010:#x}'
'0x5a' # hexadecimal
>>> f'{0b1011010:#0}'
'90' # decimal
কোলন দ্বারা পৃথক করা 2 টুকরা তথ্যের প্রতি মনোযোগ দিন।
এইভাবে, আপনি কোলনের ডান দিকটি পরিবর্তন করে {বাইনারি, অষ্টাল, হেক্সাডেসিমাল, দশমিক} থেকে inary বাইনারি, অক্টাল, হেক্সাডেসিমাল, দশমিক between এর মধ্যে রূপান্তর করতে পারেন [:]
:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal
:#0 -> converts to decimal as above example
অষ্টাল / হেক্সাডেসিমাল / দশমিকের জন্য কোলনের বাম দিক পরিবর্তন করার চেষ্টা করুন।
বড় ম্যাট্রিক্সের জন্য (10 ** 5 টি সারি এবং তার বেশি) ভেক্টরাইজড ম্যাটমল্ট ব্যবহার করা ভাল। একটি শটে সমস্ত সারি এবং কলগুলিতে পাস করুন। এটি অত্যন্ত দ্রুত। এখানে অজগরটিতে কোনও লুপিং নেই। আমি মূলত এটিকে বিভিন্ন বাইনারি কলামগুলিকে মুভিলেন্সে 10 টি বিভিন্ন জেনার কলামের মতো মুভিলেন্সে প্রতিটি উদাহরণ সারিটির জন্য একক পূর্ণসংখ্যায় রূপান্তর করার জন্য ডিজাইন করেছি।
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