Python 在numpy矩阵列上迭代

Python 在numpy矩阵列上迭代,python,numpy,matrix,Python,Numpy,Matrix,我有以下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

我有以下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:unhabable type


另外,我不确定迭代是否是最好的解决方案,我还尝试了类似于
R[:,I]
的方法来获取每一列,并使用
sum(R[:,I])
对其求和,但不断得到相同的错误。

最好使用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. ])

这是一个大矩阵,我有(9000 x 15000)。我不知道如何将其更改为np.array。只需将其馈送到
np.array
np.array(np.matrix([[1,2,3],[4,5,6]])
np.array
完全可以处理大型2d数组。
np.matrix
存在的唯一原因是它与
*
运算符的行为:它对
np.matrix
执行矩阵乘法而不是元素乘法。但是现在我们有
@
来做矩阵乘法,所以我们根本不需要
np.matrix
。谢谢!它主要起作用,但倾向于将nan放在列/行中,其中都是零而不是零。您可以使用
np.nan\u to_num()
来消除这些nan。(然而,严格地说,这是一种正确的行为:空数字集的平均值是一种nan,而不是零:))你是如何得到这种整洁的表格显示的?这不是正常的
numpy
。有了行和列标签,它看起来像熊猫,。你所说的矩阵是什么意思?它是numpy。我从
R=np.zero((Rrows,Rcols))
开始,然后迭代并填充非零值,它主要是一个稀疏矩阵。它可以很好地显示,因为我使用ipython笔记本。好的,我使用所有的ipython,但不是笔记本。但是如果那是``R`,我看不出
不可损坏的
错误来自哪里。报告错误时,应至少显示错误堆栈的一部分以及产生错误堆栈的代码行。您可以尝试使用
sum
对行进行迭代。