2016-03-04 108 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) 

此外,似乎在您的代码中有返回后的打印。我认为它永远不会执行;)