循环访问numpy的矩阵列

问题描述:

我有以下numpy的矩阵:循环访问numpy的矩阵列

 0  1  2  3  4  5  6  7  8  9  
0  0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
1  0.0 0.0 5.0 0.0 9.0 0.0 0.0 0.0 0.0 0.0 
2  0.0 0.0 0.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0 
3  0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 0.0 
4  0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
5  0.0 0.0 7.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 
6  0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
7  5.0 0.0 0.0 0.0 0.0 0.0 0.0 6.0 0.0 0.0 
8  2.0 0.0 0.0 0.0 3.0 0.0 6.0 0.0 8.0 0.0 
9  0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
10  0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 

我想单独计算非零值平均每行和列的。所以,我的结果应该是这样的:

average_rows = [1.0,7.0,2.0,5.0,0.0,4.0,0.0,5.5,4.75,1.0,0.0] 
average_cols = [3.5,1.0,4.33333,0.0,4.33333,0.0,4.0,6.0,6.5,0.0] 

我无法弄清楚如何在它们迭代,我不断收到TypeError: unhashable type

而且,我不知道,如果迭代是最好的解决办法,我也尝试了类似R[:,i]来抓取每一列,并使用sum(R[:,i])对它进行求和,但仍然得到相同的错误。

+0

你是怎么得到这个整洁的表格显示?这是不正常的'numpy'。行和列标签看起来像'pandas' ,. “矩阵”是什么意思? – hpaulj

+0

这是numpy。我从'R = np.zeros((Rrows,Rcols))'开始,然后迭代并填充非零值,它大多是一个稀疏矩阵。它可以很好地显示,因为我使用ipython笔记本。 – BKS

+0

好的,我使用Ipython,但不是笔记本。但如果这是''R'我看不到'不可能'的错误来自哪里。报告错误时,您应该至少显示部分错误堆栈和生成它的代码行。 – hpaulj

最好用2d np.array代替矩阵。

import numpy as np 
data = np.array([[1, 2, 0], [0, 0, 1], [0, 2, 4]], dtype='float') 
data[data == 0] = np.nan 
# replace all zeroes with `nan`'s to skip them 
# [[ 1. 2. nan] 
# [ nan nan 1.] 
# [ nan 2. 4.]] 
np.nanmean(data, axis=0) 
# array([ 1. , 2. , 2.5]) 
np.nanmean(data, axis=1) 
# array([ 1.5, 1. , 3. ]) 
+0

这是一个很大的矩阵(9,000 x 15,000)。我不知道如何将其更改为np.array。 – BKS

+0

只需将它提供给'np.array':'np.array(np.matrix([[1,2,3],[4,5,6]]))''。 'np.array'完全可以与大型二维数组一起工作。 –

+0

为什么'np.matrix'存在的唯一原因是它带有'*'运算符的行为:它为'np.matrix'做了矩阵乘法而不是elementwise。但是现在我们有'@'来做矩阵乘法,所以我们根本不需要'np.matrix'。 –