我一直在试图找到一种方法来计算稀疏矩阵的逐列平均值,忽略零值。对于numpy数组,我可以这样做:
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)
scipy
稀疏矩阵具有属性数据和索引,您可以使用这两个来计算沿列轴的平均值,并进一步检查高于平均值的值。示例:编辑:csr格式的一点背景知识。
m.indices
(假设我,m.indices[i]
)中的每个条目表示m.data
(m.data[i]
)中相应条目的列索引。你知道吗示例取自scipy文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html
相关问题 更多 >
编程相关推荐