एक 2 डी सरणी में आयाम भर में गणना करें


82

मेरे पास एक सरणी aहै:

a = [[40, 10], [50, 11]]

मुझे प्रत्येक आयाम के लिए अलग से माध्य की गणना करने की आवश्यकता है, परिणाम यह होना चाहिए:

[45, 10.5]

45का मतलब है a[*][0]और 10.5का मतलब है a[*][1]

लूप का उपयोग किए बिना इसे हल करने का सबसे सुरुचिपूर्ण तरीका क्या है?

जवाबों:


131

a.mean()एक axisतर्क लेता है:

In [1]: import numpy as np

In [2]: a = np.array([[40, 10], [50, 11]])

In [3]: a.mean(axis=1)     # to take the mean of each row
Out[3]: array([ 25. ,  30.5])

In [4]: a.mean(axis=0)     # to take the mean of each col
Out[4]: array([ 45. ,  10.5])

या, एक स्टैंडअलोन फ़ंक्शन के रूप में:

In [5]: np.mean(a, axis=1)
Out[5]: array([ 25. ,  30.5])

आपकी स्लाइसिंग काम नहीं कर रही थी क्योंकि यह स्लाइसिंग के लिए वाक्य रचना है:

In [6]: a[:,0].mean() # first column
Out[6]: 45.0

In [7]: a[:,1].mean() # second column
Out[7]: 10.5

अपनी त्वरित प्रतिक्रिया के लिए धन्यवाद। क्या In [n]:मतलब है? क्या यह कोड का हिस्सा है?
otmezger

मैं numpy का उपयोग कर रहा हूं, इसलिए लाइन 2 और 3 बहुत बढ़िया काम करता है, लेकिन axis=0इसके साथaxis=1
otmezger

@otmezger axis=0अगली लाइन पर है। मैंने अधिक जानकारी दिखाने के लिए संपादित किया, ताज़ा करें, शायद?
Askewchan

1
@otmezger आपका स्वागत है। ध्यान दें कि कई सुन्न सरणी तरीके इस तरह से एक अक्ष तर्क लेते हैं।
आस्कवचन

1
@askewchan: क्या mean = np.mean(a, axis=(0,2,3)) mean? पता है कि इनपुट टेंसर (ए) आकार (बैच, चैनल, चौड़ाई, ऊंचाई) का है?
रीका


4

यदि आप ऐसा करते हैं, तो NumPy जाने का रास्ता है।

यदि किसी कारण से आप NumPy का उपयोग नहीं कर सकते हैं:

>>> map(lambda x:sum(x)/float(len(x)), zip(*a))
[45.0, 10.5]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.