बूलियन सरणी को एक इंट सरणी में कैसे परिवर्तित करें


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)

ध्यान दें कि ऐसा करने के लिए यह आवश्यक भी नहीं हो सकता है, यह इस बात पर निर्भर करता है कि आप किस सरणी के लिए उपयोग कर रहे हैं। बूल को कई मामलों में int के लिए ऑटोप्रोमोट किया जाएगा, इसलिए आप इसे स्पष्ट रूप से बदलने के लिए बिना int सरणियों में जोड़ सकते हैं:

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

5
हाँ, मैं भी x * 1 टाइप कर सकता हूँ ... और यह वही काम करता है जो शिलाब करता है .... * लगता है कि अब dumbass जैसा है * .. आप सभी की मदद के लिए धन्यवाद! .... हालाँकि जवाब सही था मेरे में! प्रश्न, मुझे वास्तव में उत्तर की विविधता प्राप्त करना और इसे करने के सभी विभिन्न तरीकों को देखना पसंद है। वास्तव में अजगर के बारे में मेरा मन खोला।
क्वॉल्फ जूल

पुन: बूलियन सरणियों को स्वत: स्फुरित किया जा रहा है: दुर्भाग्य से, सुन्न इस के अनुरूप नहीं है। दो बूलियन सरणियों को घटाने की कोशिश करें, और आपको एक टाइपर्र और एक डिप्रेसेशन संदेश मिलता है।
१०:५५

52

1*yNumpy में भी यह विधि काम करती है:

>>> 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, ये सभी प्रलेखन में हैं।
Sukrit Kalra


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

हां, लूपिंग धीमा है। मैंने जो पढ़ा है, अगर आपको कुछ समय के लिए गंभीर क्रंच करने की आवश्यकता है तो आपको अजगर से सी बुलाना चाहिए। क्या आप ऐसा करने के लिए कोई संदर्भ जानते हैं? भी, आपकी मदद के लिए धन्यवाद। सभी ने कितनी तेजी से प्रतिक्रिया दी!
क्वॉल्फ जूल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.