Я пытался найти способ вычислить среднее по столбцам разреженной матрицы, игнорируя нулевые значения. для пустого массива я мог бы сделать это:
arr = np.array([[1, 1, 1, 1, 1, 1, 0, 0, 0],
[1, 0, 0, 0, 1, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 1, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 4],
[0, 0, 0, 0, 0, 0, 0, 0, 5],
[0, 0, 0, 0, 0, 0, 0, 0, 1]])
arr[arr == 0] = np.nan
means = np.nanmean(arr, axis=0)
или я мог бы сделать:
#I don't understand why tmean axis=1 doesn't work. I ended up with this
f = lambda x: tmean(x,(0,None),(False,None))
means = list(map(f,arr.T))
наконец, я хочу сохранить значения выше среднего в каждом столбце
arr[arr<means.reshape(1,arr.shape[1])]=0
array([[1., 1., 1., 1., 0., 1., 0., 0., 0.],
[1., 0., 0., 0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 1., 1., 0., 1., 0.],
[0., 1., 0., 0., 0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 4.],
[0., 0., 0., 0., 0., 0., 0., 0., 5.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.]])
Как мне добиться этого с разреженной матрицей? arr_csr = csr_matrix(arr)