2013-04-04 42 views
43

Tôi có một mảng a như thế này:Tính nghĩa trên khía cạnh trong một mảng 2D

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

tôi cần phải tính toán giá trị trung bình cho mỗi chiều riêng biệt, kết quả phải được điều này:

[45,10.5] 

45 là giá trị trung bình của a[*][0]10.5 giá trị trung bình của `a [*] [1].

Cách thanh lịch nhất để giải quyết vấn đề này mà không đi vòng lặp là gì?

Trả lời

63

a.mean() mất một axis luận:

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]) 

Hoặc, như một chức năng độc lập:

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

Lý do cắt của bạn không hoạt động là bởi vì đây là cú pháp để cắt:

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

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

nhờ cho phản ứng nhanh chóng của bạn. 'In [n]:' có nghĩa là gì? phần này có phải là mã không? – otmezger

+0

Đó là vì tôi đang sử dụng [IPython] (http://ipython.org/). – askewchan

+0

Tôi đang sử dụng gọn gàng, vì vậy dòng 2 và 3 hoạt động rất tốt, nhưng với 'axis = 0' thay vì' axis = 1' – otmezger

3

Nếu bạn làm điều này rất nhiều, NumPy là con đường để đi.

Nếu vì một số lý do bạn không thể sử dụng NumPy:

>>> map(lambda x:sum(x)/float(len(x)), zip(*a)) 
[45.0, 10.5] 
7

Dưới đây là một giải pháp không NumPy:

>>> a = [[40, 10], [50, 11]] 
>>> [float(sum(l))/len(l) for l in zip(*a)] 
[45.0, 10.5] 
Các vấn đề liên quan