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

对行中的元素求和(Python/Numpy),python,arrays,list,numpy,Python,Arrays,List,Numpy,在一个让我们自由支配使用什么的项目上工作。所以我决定为此学习python 简而言之,我想把我正在阅读的矩阵的“行”中的所有元素求和 这就是我从文本文件中读取表格后的2D数组的外观 ['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

在一个让我们自由支配使用什么的项目上工作。所以我决定为此学习python

简而言之,我想把我正在阅读的矩阵的“行”中的所有元素求和

这就是我从文本文件中读取表格后的2D数组的外观

['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]
我不确定错误是什么,但我认为这与string/int转换有关。因为我的表是字符串,但我把它转换成整数求和。调试它会显示正确的结果,所以我不确定错误在哪里

这是我的密码:

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(数组,轴=1).tolist()
这将返回一个包含所有行总和的列表

例:

将numpy导入为np
数组=np.数组([范围(10)、范围(10)、范围(10)、范围(10)])
sum=np.sum(数组,轴=1).tolist()
打印金额_
打印类型(总和)
>> [45, 45, 45, 45]
>> 

好的。找到了答案

@wajid Farhani离我很近,但对我来说不起作用

他的np.sum命令有效,但我必须执行一些索引,以便忽略每行的索引0。我的问题是,我认为索引2D数组是由数组[x][y]完成的,而它是数组[x,y]

固定代码:

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))

print("number of rows:", len(r))
print("number of cols:", len(r[0]))
print("num1s before:",num1s)

array = numpy.array(r,dtype=int)

s = numpy.sum(array[0:len(array),1:len(array[0])],axis=1).tolist()

print("num1s after :",s)
正确输出:

num1s before: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
num1s after : [1, 4, 4, 4, 4, 5, 5, 3, 4, 5, 5, 3, 4, 3, 3, 3]

哈哈,兄弟,我知道我一定在python中让很多事情复杂化了。这是生成列表的命令吗?如中所示,我不需要嵌套的for循环?是的
。tolist()
将生成一个列表,而您不需要为此创建循环。试试看,它似乎不起作用。这就是我正在做的:w=numpy.sum(r,axis=1.tolist(),然后打印w。当我运行它时,我得到“不能使用灵活类型执行reduce”。你介意编辑我的代码并告诉我你是怎么做的吗?我很可能没有正确地实现它。@user4927176好的,用这种方式将数组声明为浮点数组
r=numpy.genfromtxt('test1.txt',dtype=float,skiprows=1)
我希望将数组声明为int。但我希望每行的第一个元素保持不变的大小。如果我执行dtype=int,它将0000变为0,0001变为1。这是我不想要的。有解决办法吗?很高兴我的回答帮助了你。还有一件事,那就是
wajdi
而不是
wajid
:)你太复杂了
s=numpy.sum(数组[:,1:,轴=1)。tolist()
也会这样做。