2016-03-04 106 views
1

這裏有一段我​​的腳本。這個應該做的是打開一個矩陣(在文件matrix_seeds_to_all_targets中)並且對每列中的所有元素求和(最後我應該得到一個1xN的數組)。我得到的是一個錯誤:AttributeError:'list'對象沒有屬性'sum'。您能否就此給我任何見解?python sum matrix列表

def collapse_probtrack_results(waytotal_file, matrix_file): 
    with open(waytotal_file) as f: 
     waytotal = int(f.read()) 
    f = open(wayfile_template + roi + "/matrix_seeds_to_all_targets") 
    l = [map(int, line.split(',')) for line in f if line.strip() != ""] 
    collapsed = l.sum(axis=0)/waytotal * 100. 
    return collapsed 
    print (collapsed) 

回答

0

如消息所示:列表中沒有名爲sum的方法。目前還不清楚你在這方面做了什麼,所以不能比這更有幫助。

0

你可以只使用,而不是試圖總結在表numpy的:

import numpy as np 

matrix = np.random.randint(0, 100, (3, 6)) //read in your matrix file here 

newMatrix = np.sum(matrix, axis=0) 

print newMatrix 

,這將給你是這樣的:

[168 51 23 115 208 54] 

沒有numpy的,你就必須使用類似的列表理解去查看列表中的「列」來總結它們。 Python的列表總和適用於列表,如果您有1)矩陣和2)想要對列進行求和,那麼這不是你所擁有的。

+0

感謝您的回答。我試圖使用你的建議,但是我得到以下錯誤: sum = a.sum AttributeError:'list'對象沒有屬性'sum' – StudentOIST

+0

你不應該得到與上述列表錯誤。在我的代碼中,您必須將數據導入爲實際的numpy數組,而不是列表或嵌套列表。我的'矩陣'不像你的原始代碼中的列表。您必須使用numpys'fromfile','genfromtext','loadtxt'方法之一加載數據文件,以便在嘗試求和之前將其轉換爲正確的格式。您使用哪個取決於您原始矩陣文件的格式 – Simon

0

我認爲指令l.sum()是錯誤的。用來總結了一個列表的功能是sum,必須使用此示例中:

myList = [1, 2, 3] 
sum(myList) # will return 6 
myList.sum() # will throw an error 

如果你想選擇一個給定的列中,您可以在列表理解:[row[columnID] for row in A]

所以,例如,該代碼將總結在名爲l的二維數組的不同行上。

numCols = len(l[0]) 
result = [] 
for i in range(numCols) 
    result.append(sum([row[i] for row in l])) 

print(result) 

此外,似乎在您的代碼中有返回後的打印。我認爲它永遠不會執行;)