2017-02-05 134 views
0

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

回答

1

最好用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'。 –