मैं खुद को फिर से अजगर में वापस ला रहा हूं। वर्तमान में कुछ सुन्न सामान सीखने की कोशिश कर रहा है। मेरे पास 10x10 आयाम और 0 से 99 तक की संख्या के साथ एक संख्यात्मक सरणी seq_arr
है।
seq_arr = np.arange(100).reshape(10, 10)
इसके साथ मैं सभी विषम संख्याओं को शून्य, सभी संख्या> 17 से शून्य और अंत में सब कुछ% 3 == 0 से शून्य पर सेट करना चाहता हूं। पहली दो चीजें काम करती हैं:
even_arr = np.where(seq_arr % 2 == 0, seq_arr, 0)
bigger_than_arr = np.where(even_arr>17, seq_arr, 0)
आखिरी एनपी के बाद। जहां मेरे पास है:
[[ 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 18 0]
[20 0 22 0 24 0 26 0 28 0]
[30 0 32 0 34 0 36 0 38 0]
[40 0 42 0 44 0 46 0 48 0]
[50 0 52 0 54 0 56 0 58 0]
[60 0 62 0 64 0 66 0 68 0]
[70 0 72 0 74 0 76 0 78 0]
[80 0 82 0 84 0 86 0 88 0]
[90 0 92 0 94 0 96 0 98 0]]
जो बिल्कुल वही है जो मैं चाहता हूं। उसके बाद मेरी आखिरी शर्त लागू करने के बाद
final_arr = np.where(bigger_than_arr%3==0, seq_arr, 0)
मुझे केवल कचरे का एक गुच्छा मिलता है:
[[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]
[ 0 21 0 23 24 25 0 27 0 29]
[30 31 0 33 0 35 36 37 0 39]
[ 0 41 42 43 0 45 0 47 48 49]
[ 0 51 0 53 54 55 0 57 0 59]
[60 61 0 63 0 65 66 67 0 69]
[ 0 71 72 73 0 75 0 77 78 79]
[ 0 81 0 83 84 85 0 87 0 89]
[90 91 0 93 0 95 96 97 0 99]]
विषम संख्याएँ फिर से क्यों दिखाई देती हैं? संख्याएं <=17 फिर से क्यों दिखाई देती हैं? मुझे यह बिलकुल समझ में नहीं आया।
धन्यवाद!
डूफ़ेसोहर
3 जवाब
यहाँ उत्तर काफी सरल है। आपने दूसरे तर्क में गलत सरणी का चयन किया :)
final_arr = np.where(bigger_than_arr%3==0, bigger_than_arr, 0)
पहले दो का स्टैकिंग केवल इसलिए काम करता है क्योंकि इनपुट सरणी में विषम संख्याएं सभी 0 हैं और इस प्रकार 17 से कम हैं।
सटीक होने के लिए, दूसरी स्थिति को निश्चित रूप से निम्नलिखित में बदला जाना चाहिए:
bigger_than_arr = np.where(even_arr>17, even_arr, 0)
तब समग्र उत्पादन इस तरह दिखता है:
[[ 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 18 0]
[ 0 0 0 0 24 0 0 0 0 0]
[30 0 0 0 0 0 36 0 0 0]
[ 0 0 42 0 0 0 0 0 48 0]
[ 0 0 0 0 54 0 0 0 0 0]
[60 0 0 0 0 0 66 0 0 0]
[ 0 0 72 0 0 0 0 0 78 0]
[ 0 0 0 0 84 0 0 0 0 0]
[90 0 0 0 0 0 96 0 0 0]]
विषम संख्याएँ और संख्याएँ <= 17 फिर से प्रकट होने का कारण 0% 3 == 0 है।
उदाहरण के लिए इंडेक्स 1 लें।
seq_arr[1] == 1
Np.arange . की परिभाषा के अनुसार
even_arr[1] <- seq_arr[1] if seq_arr[1] % 2 == 0, else 0.
even_arr[1] <- 1 if 1 % 2 == 0, else 0
even_arr[1] <- 0
bigger_than_arr[1] <- seq_arr[1] if even_arr[1] > 17, else 0
bigger_than_arr[1] <- 1 if 0 > 17, else 0
bigger_than_arr[1] <- 0
final_arr[1] <- seq_arr[1] if bigger_than_arr[1] % 3 == 0, else 0
final_arr[1] <- 1 if 0 % 3 == 0, else 0
(0 % 3 is == 0), therefore
final_arr[1] <- 1
आप जो इरादा कर सकते थे वह लिखना था
final_arr = np.where(bigger_than_arr % 3 == 0, bigger_than_arr, 0)
आपको यह क्रम आजमाना चाहिए:
even_arr = np.where(seq_arr % 2 == 0, seq_arr, 0)
bigger_than_arr = np.where(even_arr>17, even_arr, 0)
final_arr = np.where(bigger_than_arr%3==0, bigger_than_arr, 0)
यदि आप ध्यान से देखें, तो अंतिम परिणाम में कूड़ा-करकट नहीं है। इसमें आपके मूल सरणी seq_arr
के सभी मान शामिल हैं जहां bigger_than_arr
शून्य था। यह अपेक्षित है, क्योंकि 0%3=0
और इसलिए आपकी स्थिति उन सभी 'शून्य' पर संतुष्ट है।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।