2012-04-30 12 views
6

मेरा प्रश्न बहुत सरल है, मान लीजिए कि मैं की तरहहो रही उलटा (1/एक्स) एक numpy सरणी के तत्वों

array = np.array([1, 2, 3, 4]) 

एक सरणी है और मैं

[1, 0.5, 0.3333333, 0.25] 
की तरह एक सरणी प्राप्त करना चाहते हैं

हालांकि, अगर आप

1/array 

या

की तरह कुछ लिखने
np.divide(1.0, array) 

यह काम नहीं करेगा।

एक ही रास्ता मैं अब तक मिल गया है की तरह कुछ लिखने के लिए:

print np.divide(np.ones_like(array)*1.0, array) 

लेकिन मैं कर रहा हूँ बिल्कुल certains ऐसा करने के लिए एक बेहतर तरीका नहीं है। क्या किसी को कोई ख़याल है?

उत्तर

7

1/array एक पूर्णांक विभाजन बनाता है और array([1, 0, 0, 0]) देता है।

>>> array = np.array([1, 2, 3, 4]) 
>>> 1./array 
array([ 1.  , 0.5  , 0.33333333, 0.25  ]) 
+0

एक अलग रूप में के रूप में, यदि आप अपने कोड की शुरुआत में '__future__ आयात प्रभाग से' डालते हैं, तो यह हमेशा पूर्णांक के साथ वास्तविक विभाजन करेगा रों। यह पायथन 3 में डिफ़ॉल्ट व्यवहार है, क्योंकि यह उत्तर है कि ज्यादातर लोग उम्मीद करते हैं। आप अभी भी '//' ऑपरेटर का उपयोग कर पूर्णांक विभाजन प्राप्त कर सकते हैं। – DaveP

1

मैंने कोशिश की:

1./array तैरने लगते हैं और चाल करने के लिए सरणी डाली जाएगा

inverse=1./array 

और कहा कि काम करने के लिए ... कारण

1/array 
लग रहा था

काम नहीं करता है क्योंकि आपकी सरणी पूर्णांक है और 1/<array_of_integers> पूर्णांक विभाजन करता है।

1

अन्य संभव तरीके पूर्णांकों की एक सरणी के प्रत्येक तत्व की पारस्परिक पाने के लिए:

inv = np.reciprocal(array.astype(np.float32)) 

कास्ट:

array = np.array([1, 2, 3, 4]) 

numpy के पारस्परिक का उपयोग

inv = 1/(array.astype(np.float32)) 
संबंधित मुद्दे