Bạn có thể sử dụng binned_statistic
from scipy.stats có hỗ trợ chức năng thống kê khác nhau được áp dụng trong khối qua một mảng 1D. Để có được khối, chúng ta cần phải sắp xếp và nhận được vị trí của sự thay đổi (nơi khối thay đổi), mà np.unique
sẽ hữu ích. Đưa tất cả những, đây là một thực hiện -
from scipy.stats import binned_statistic as bstat
# Sort data corresponding to argsort of first column
sdata = data[data[:,0].argsort()]
# Unique col-1 elements and positions of breaks (elements are not identical)
unq_x,breaks = np.unique(sdata[:,0],return_index=True)
breaks = np.append(breaks,data.shape[0])
# Use binned statistic to get grouped average and std deviation values
idx_range = np.arange(data.shape[0])
avg_y,_,_ = bstat(x=idx_range, values=sdata[:,1], statistic='mean', bins=breaks)
std_y,_,_ = bstat(x=idx_range, values=sdata[:,1], statistic='std', bins=breaks)
Từ các tài liệu của binned_statistic
, người ta cũng có thể sử dụng một chức năng thống kê tùy chỉnh:
chức năng: một chức năng người dùng định nghĩa mà phải mất một mảng 1D của các giá trị , và xuất ra một thống kê số duy nhất. Hàm này sẽ được gọi là trên các giá trị trong mỗi thùng. Thùng trống sẽ được thể hiện bằng hàm ([]) hoặc NaN nếu điều này trả về lỗi.
mẫu đầu vào, đầu ra -
In [121]: data
Out[121]:
array([[2, 5],
[2, 2],
[1, 5],
[3, 8],
[0, 8],
[6, 7],
[8, 1],
[2, 5],
[6, 8],
[1, 8]])
In [122]: np.column_stack((unq_x,avg_y,std_y))
Out[122]:
array([[ 0. , 8. , 0. ],
[ 1. , 6.5 , 1.5 ],
[ 2. , 4. , 1.41421356],
[ 3. , 8. , 0. ],
[ 6. , 7.5 , 0.5 ],
[ 8. , 1. , 0. ]])
Bạn có thể thêm một [Minimal, Hoàn thành, và kiểm chứng ví dụ] (http://stackoverflow.com/help/mcve) cho câu hỏi của bạn? – Kasramvd
Hãy xem http://stackoverflow.com/questions/4373631/sum-array-by-number-in-numpy –
Ngoài ra: nếu bạn đang làm việc với dữ liệu thực tế, có thể bạn sẽ thấy dễ dàng hơn để sử dụng ['pandas'] (http://pandas.pydata.org) hơn là numpy trần. Nếu 'data' của bạn là' DataFrame' thay vì 'ndarray', giống như' df.groupby (0) [1] .agg (["mean", "std"]) 'sẽ hoạt động .. – DSM