Skip to main content
 首页 » 编程设计

python之对一行中的元素求和(Python/Numpy)

2025年05月04日15dflying

从事一个让我们可以自由支配使用什么的项目。所以我决定为此学习 Python。

为简短起见,我想对正在读取的矩阵的“行”中的所有元素求和。

这是我从文本文件中读取表格后的二维数组的样子。

['0000' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1'] 
['0001' '0' '1' '0' '1' '0' '0' '0' '0' '1' '0' '0' '0' '0' '1'] 
['0010' '0' '1' '0' '1' '0' '0' '0' '0' '1' '0' '0' '0' '0' '1'] 
['0011' '0' '1' '0' '1' '0' '0' '0' '0' '1' '0' '0' '0' '0' '1'] 
['0100' '0' '0' '0' '0' '0' '1' '0' '1' '0' '0' '1' '0' '0' '1'] 
['0101' '0' '0' '1' '0' '0' '0' '1' '0' '0' '1' '0' '1' '1' '0'] 
['0110' '0' '0' '1' '0' '1' '0' '0' '0' '0' '1' '0' '1' '1' '0'] 
['0111' '0' '0' '1' '0' '0' '0' '0' '0' '0' '1' '0' '0' '1' '0'] 
['1000' '0' '0' '0' '0' '0' '1' '0' '1' '0' '0' '1' '0' '0' '1'] 
['1001' '1' '0' '0' '0' '0' '0' '1' '0' '0' '1' '0' '1' '1' '0'] 
['1010' '1' '0' '0' '0' '1' '0' '0' '0' '0' '1' '0' '1' '1' '0'] 
['1011' '1' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '0' '1' '0'] 
['1100' '0' '0' '0' '0' '0' '1' '0' '1' '0' '0' '1' '0' '0' '1'] 
['1101' '0' '0' '0' '0' '0' '0' '1' '0' '0' '0' '0' '1' '1' '0'] 
['1110' '0' '0' '0' '0' '1' '0' '0' '0' '0' '0' '0' '1' '1' '0'] 
['1111' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '1' '1' '0'] 

我想对除索引 0(4 位数字)之外的每一行的所有元素求和。然后将这些总和存储在列表中。

我的总和列表应该是这样的:

[1, 4, 4, 4, 4, 4, 5, 5, 3,.......,3] (Imagine it was all filled with the right sums) 

但是,这是我的代码输出的内容:

number of rows: 16 
number of cols: 15 
num1s before: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
num1s after : [3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 7, 9, 7] 

我不确定错误是什么,但我认为它与字符串/整数转换有关。由于我的表格是字符串形式,但我将其转换为整数以进行求和。调试它显示正确的结果,所以我不确定错误在哪里。

这是我的代码:

import numpy 
 
print ("Reading..") 
txtfile = open("test1.txt", "r") 
print(txtfile.readline()) 
txtfile.close() 
 
r= numpy.genfromtxt('test1.txt',dtype=str,skiprows=1) 
 
for x in range (0,len(r)): 
    print(r[x]) 
 
allTested = [0] * (len(r[0]) - 1) 
num1s = [0] * (len(r[0]) - 1) 
 
print("number of rows:", len(r)) 
print("number of cols:", len(r[0])) 
print("num1s before:",num1s) 
 
for x in range (0,len(r)): 
    for y in range(1,len(r[0])): 
        num1s[y-1] += int(r[x][y]) 
 
 
print("num1s after :",num1s) 

请您参考如下方法:

你把它复杂化了。而是尝试:

np.sum(array,axis=1).tolist() 

这应该返回一个列表,其中包含所有行的总和

例如:

import numpy as np 
array = np.array([range(10),range(10),range(10),range(10)]) 
 
sum_ = np.sum(array,axis=1).tolist() 
 
print sum_ 
print type(sum_)  
 
>> [45, 45, 45, 45] 
>> <type 'list'>