Tôi có một mảng NumPy như thế này:thay zero trong mảng NumPy với giá trị trung bình
foo_array = [38,26,14,55,31,0,15,8,0,0,0,18,40,27,3,19,0,49,29,21,5,38,29,17,16]
Tôi muốn thay thế tất cả các số không có giá trị trung bình của toàn bộ mảng (trong đó các giá trị zero không để được bao gồm trong việc tính trung bình)
cho đến nay tôi đã này xảy ra:
foo_array = [38,26,14,55,31,0,15,8,0,0,0,18,40,27,3,19,0,49,29,21,5,38,29,17,16]
foo = np.array(foo_array)
foo = np.sort(foo)
print "foo sorted:",foo
#foo sorted: [ 0 0 0 0 0 3 5 8 14 15 16 17 18 19 21 26 27 29 29 31 38 38 40 49 55]
nonzero_values = foo[0::] > 0
nz_values = foo[nonzero_values]
print "nonzero_values?:",nz_values
#nonzero_values?: [ 3 5 8 14 15 16 17 18 19 21 26 27 29 29 31 38 38 40 49 55]
size = np.size(nz_values)
middle = size/2
print "median is:",nz_values[middle]
#median is: 26
có một cách thông minh để đạt được điều này với cú pháp numPy?
Cảm ơn bạn
Đợi chút ... Trung bình phải là 26? Khi mảng phần tử khác không được sắp xếp (3 5 8 14 15 16 17 18 19 21 26 27 29 29 31 38 38 40 49 55), giá trị ở giữa là 26. – slashdottir
Không sao, bạn nói đúng. Đó là một giải pháp tốt – slashdottir
Vâng, có 20 phần tử khác 0. Hai ở giữa là 21 và 26. Trung bình thường được tính là trung bình của hai ở giữa cho một số nguyên tố, vì vậy chúng tôi nhận được 23,5. Cảm ơn bạn đã upvote! – bbayles