2013-01-20 10 views
6

क्या अतिरिक्त प्रतिलिपि के बिना NumPy बहु-आयामी सरणी के साथ न्यूनतम/अधिकतम इन-प्लेस असाइनमेंट करना संभव है?NumPy मिनट/अधिकतम इन-प्लेस असाइनमेंट

कहो, a और b दो 2 डी NumPy सरणी के हैं और मैं सभी i और j के लिए a[i,j] = min(a[i,j], b[i,j]) करना चाहते हैं।

एक तरीका यह है के लिए है:

a = numpy.minimum(a, b) 

लेकिन दस्तावेज़ के अनुसार, numpy.minimum बनाता है और एक नई सरणी देता है:

numpy.minimum (x1, x2 [, बाहर])
एलिमेंट-वार सरणी तत्वों के न्यूनतम।
दो सरणी की तुलना करें और एक नई सरणी तत्व-वार मिनीमा युक्त है।

तो उपरोक्त कोड में, यह एक नया अस्थायी सरणी (a और b की मिनट) पैदा करेगा, तो a के लिए असाइन करें और यह निपटान, है ना?

क्या a.min_with(b) जैसे कुछ करने का कोई तरीका है ताकि न्यूनतम परिणाम a पर जगह पर असाइन किया गया हो?

उत्तर

9

numpy.minimum() एक वैकल्पिक तीसरा तर्क लेता है, जो आउटपुट सरणी है। आप निर्दिष्ट कर सकते वहाँ a यह जगह में बदलाव कर दिया है करने के लिए:

In [9]: a = np.array([[1, 2, 3], [2, 2, 2], [3, 2, 1]]) 

In [10]: b = np.array([[3, 2, 1], [1, 2, 1], [1, 2, 1]]) 

In [11]: np.minimum(a, b, a) 
Out[11]: 
array([[1, 2, 1], 
     [1, 2, 1], 
     [1, 2, 1]]) 

In [12]: a 
Out[12]: 
array([[1, 2, 1], 
     [1, 2, 1], 
     [1, 2, 1]]) 
+0

वास्तव में यह तीसरी पैरामीटर ले करता है। धन्यवाद! :) – alveko

+0

इससे पहले और बाद में 'आईडी (ए)' प्रिंट करने के लिए थोड़ा सा जवाब बेहतर होगा। –

+0

@ jwpat7: मैंने परेशान नहीं किया क्योंकि कोई फ़ंक्शन कॉल करने का कोई तरीका नहीं है, किसी भिन्न ऑब्जेक्ट को इंगित करने के लिए 'a' को पुनर्जीवित कर सकता है। – NPE