回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我一直在试图找到一种方法来计算稀疏矩阵的逐列平均值,忽略零值。对于numpy数组,我可以这样做:</p>
<pre><code>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)
</code></pre>
<p>或者我可以:</p>
<pre><code>#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))
</code></pre>
<p>最后,我想在每一列中保持上面的平均值</p>
<pre><code>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.]])
</code></pre>
<p>如何使用稀疏矩阵实现这一点?<code>arr_csr = csr_matrix(arr)</code></p>