কীভাবে একটি বুলিয়ান অ্যারেটিকে কোনও int অ্যারে রূপান্তর করা যায়


129

আমি সাইল্যাব ব্যবহার করি এবং বুলেটগুলির একটি অ্যারেটিকে পূর্ণসংখ্যার অ্যারে রূপান্তর করতে চাই:

>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False,  True,  True], dtype=bool)

সাইলেব আমি ব্যবহার করতে পারেন:

>>> bool2s(y)
0.    0.    1.    1.  

বা এমনকি এটি 1 দ্বারা গুণান:

>>> 1*y
0.    0.    1.    1.  

পাইথনে এটির জন্য একটি সহজ কমান্ড আছে, বা আমাকে একটি লুপ ব্যবহার করতে হবে?


আপনি কি বুলিয়ান অ্যারেটিকে স্কিপি, নম্পুটে এবং এর মতো ছাড়িয়ে একটি পূর্ণসংখ্যার রূপান্তর করার উপায় জিজ্ঞাসা করছেন?
সুকৃত কালরা

ফর্ম্যাটিং কোডের আলাদা উপায় আছে। আপনাকে ব্লককোট ব্যবহার করতে হবে না। এটি ইনডেন্টিং দ্বারা সম্পন্ন হয়েছে, এবং প্রশ্ন সম্পাদক এর উপরে কোঁকড়া ধনুর্বন্ধনী বোতাম এটি আপনার জন্য করবে। এটা দেখ.
মার্সিন

সুকৃত, আমাকে স্কিপি, নম্পী বা অন্য কোনও পাইথন মডিউল প্যাকেজ ব্যবহার করতে হবে কিনা সেদিকে আমার খেয়াল নেই।
কোল্ফ

উত্তর:


167

নম্পি অ্যারে একটি astypeপদ্ধতি আছে। শুধু কর y.astype(int)

মনে রাখবেন যে আপনি অ্যারেটি কী ব্যবহার করছেন তার উপর নির্ভর করে এটি করার প্রয়োজনও হতে পারে না। বুল অনেক ক্ষেত্রেই স্ব-প্রচারিত হবে, সুতরাং আপনি এটিকে স্পষ্টভাবে রূপান্তর না করে ইন্ট্রে অ্যারে যুক্ত করতে পারেন:

>>> x
array([ True, False,  True], dtype=bool)
>>> x + [1, 2, 3]
array([2, 2, 4])

5
হ্যাঁ, আমি এক্স * 1ও টাইপ করতে পারি ... এবং এটি সায়ল্যাব একই কাজ করে .... * এখন ডাম্বাসের মতো মনে হচ্ছে * .. আপনার সহায়তার জন্য সবাইকে ধন্যবাদ! .... যদিও উত্তরটি আমার মধ্যে সঠিক ছিল প্রশ্ন, আমি বিভিন্ন উত্তর পেতে এবং এটি করার বিভিন্ন উপায় দেখে সত্যিই পছন্দ করি। সত্যিই অজগর সম্পর্কে আমার মন খুলেছে।
কোল্ফ

পুনরায় বুলেটিয়ান অ্যারেগুলি স্ব-প্রচারিত হচ্ছে: দুর্ভাগ্যক্রমে, নিম্পি এটির সাথে সামঞ্জস্য নয়। দুটি বুলিয়ান অ্যারে বিয়োগ করার চেষ্টা করুন, এবং আপনি একটি টাইপরর এবং একটি অবমূল্যায়ন বার্তা পান।
আউলেঞ্জ

52

1*yপদ্ধতি খুব Numpy কাজ করে:

>>> import numpy as np
>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False,  True,  True], dtype=bool)
>>> 1*y                      # Method 1
array([0, 0, 1, 1])
>>> y.astype(int)            # Method 2
array([0, 0, 1, 1]) 

আপনি যদি বুলিয়ান থেকে পাইথন তালিকাগুলি ইনটকে রূপান্তর করার কোনও উপায় জিজ্ঞাসা করেন তবে আপনি mapএটি ব্যবহার করতে পারেন :

>>> testList = [False, False,  True,  True]
>>> map(lambda x: 1 if x else 0, testList)
[0, 0, 1, 1]
>>> map(int, testList)
[0, 0, 1, 1]

বা তালিকা বোঝার ব্যবহার:

>>> testList
[False, False, True, True]
>>> [int(elem) for elem in testList]
[0, 0, 1, 1]

সুতরাং, y = 1 if x else 0 হিসাবে একই y = 1 if x>0 else 0এবং একই if x: y = 1 ""NEXT LINE"" else: y = 0.... আপনি কিভাবে এই কৌশলগুলি শিখেছি, আমি বিবৃতি ডকুমেন্টেশন এ এটি দেখতে পেল না ?
কোল্ফ

নং y=1 if x else 0হিসাবে একই নয় y=1 if x>0 else 0, যেহেতু পরেরটি নেতিবাচক সংখ্যাগুলি বিবেচনায় নেয় না। পাইথন কেবল এটিই Trueবা যা সংজ্ঞায়িত করে False, এগুলি ডকুমেন্টেশনে রয়েছে।
সুকৃত কালরা

24

অদ্ভুত ব্যবহার করে আপনি এটি করতে পারেন:

y = x.astype(int)

আপনি যদি একটি অ-নমপি অ্যারে ব্যবহার করে থাকেন তবে আপনি একটি তালিকা বোধগম্যতা ব্যবহার করতে পারেন :

y = [int(val) for val in x]

14

বেশিরভাগ সময় আপনার রূপান্তর প্রয়োজন হয় না:

>>>array([True,True,False,False]) + array([1,2,3,4])
array([2, 3, 3, 4])

এটি করার সঠিক উপায় হ'ল:

yourArray.astype(int)

অথবা

yourArray.astype(float)

3

আমি জানি আপনি নন-লুপিং সমাধানগুলির জন্য বলেছেন, তবে কেবলমাত্র অভ্যন্তরীণভাবে লুপটি নিয়েই আমি আসতে পারি:

map(int,y)

বা:

[i*1 for i in y]

বা:

import numpy
y=numpy.array(y)
y*1

হ্যাঁ, লুপিং ধীর। আমি যা পড়েছি তা থেকে, যদি আপনার কিছু সময় সমালোচনামূলক ক্রাঞ্চিংয়ের প্রয়োজন হয় তবে আপনাকে সিগন থেকে অজগর থেকে কল করা উচিত। এটি করার জন্য কোনও রেফারেন্স জানেন? এছাড়াও, আপনার সাহায্যের জন্য আপনাকে ধন্যবাদ। সবাই কত দ্রুত প্রতিক্রিয়া!
কোল্ফ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.