2014-11-22 133 views
1

我有一個叫做values的numpy數據矩陣,它由9000列乘49列組成。 我想計算每行的前14列的平均值,並將其輸出爲具有相同行數的數組(即9000,與len(values)相同)。numpy數組中每一行的選擇列的平均值

import numpy 

av15=[] 
a = int() 
for i in range(len(values)): 
    for x in range(0,14): 
    a += values[i,x] 
b = a/14 
av15.append(b) 

av15 = numpy.array(av15) 
av15 = av15.reshape([len(values),1])  
numpy.savetxt("av15.txt",av15, delimiter = "\t") 

我的代碼只計算正確的第一行的平均值,從那裏的值是不正確的。我找不到什麼是錯的,但是肯定有一些邏輯錯誤,我似乎找不到。誰能找到它?

謝謝

回答

1

您的原始函數的問題在於,您沒有在迭代之間重置累加器a。重用你的語法,你可以這樣做:

for i in range(len(values)): 
    a = int() 
    for x in range(0, 14): 
     a += values[i, x] 

或者因爲Python是不是一個強類型語言,使用更清晰:

for i in range(len(values)): 
    a = 0 
    for x in range(0, 14): 
     a += values[i, x] 

無論哪種方式,正確numpy的構建你後,這是什麼簡單而有效的單線:

av15 = np.mean(values[:, :14]).reshape(-1, 1) 
+0

謝謝Jaime!我可以問:「!」中驚歎號的含義是什麼?!4'? – oaklander114 2014-11-22 07:36:48

+0

這意味着我不能輸入:應該是'14',編輯過這個帖子。 – Jaime 2014-11-22 09:06:27

0

我用下面的替代方案,它給了我所有正確的數字,但我還是不明白,爲什麼在我的問題的更古老的解決辦法只有第一行工作。

av15=[] 
a = int() 
for i in range(len(values)): 
    a = values[i,0:14].mean() 
    av15.append(a) 

av15 = numpy.array(av15) 
av15 = av15.reshape([len(values),1])  
numpy.savetxt("av15.txt",av15, delimiter = "\t")