मैं खुद को फिर से अजगर में वापस ला रहा हूं। वर्तमान में कुछ सुन्न सामान सीखने की कोशिश कर रहा है। मेरे पास 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 फिर से क्यों दिखाई देती हैं? मुझे यह बिलकुल समझ में नहीं आया।

धन्यवाद!

डूफ़ेसोहर

0
doofesohr 2 नवम्बर 2020, 23:46

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]]
1
mlang 2 नवम्बर 2020, 23:54

विषम संख्याएँ और संख्याएँ <= 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)
1
jwde 2 नवम्बर 2020, 23:59

आपको यह क्रम आजमाना चाहिए:

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 और इसलिए आपकी स्थिति उन सभी 'शून्य' पर संतुष्ट है।

1
amzon-ex 2 नवम्बर 2020, 23:59