Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy sum行。。。得到奇怪的结果_Python_Arrays_Numpy - Fatal编程技术网

Python Numpy sum行。。。得到奇怪的结果

Python Numpy sum行。。。得到奇怪的结果,python,arrays,numpy,Python,Arrays,Numpy,我试图获取一组有效的二进制数据行,0行和1行,并对它们求和。这是一个使用numpy.loadtxt从文本中加载的大约一百万条记录的数组 import numpy as np data = np.loadtxt('test.txt') sdata = np.asfarray(np.sum(data,axis=1)) 问题是,我得到的是无意义的结果,我得到的是一个数组,里面有效地包含了行号之类的东西。我可以打印一个数组,例如前三行是[0,0,0,0,0,0,0,0,0,0]。但sdata数组中的前

我试图获取一组有效的二进制数据行,0行和1行,并对它们求和。这是一个使用numpy.loadtxt从文本中加载的大约一百万条记录的数组

import numpy as np
data = np.loadtxt('test.txt')
sdata = np.asfarray(np.sum(data,axis=1))
问题是,我得到的是无意义的结果,我得到的是一个数组,里面有效地包含了行号之类的东西。我可以打印一个数组,例如前三行是[0,0,0,0,0,0,0,0,0,0]。但sdata数组中的前三个“和”分别为0.0000000e+00、1.000000e+01、2.00000e+01。这显然不是我想要的总数

如果我使用axis=0,我会得到我所期望的列的总和,所以我不知道该怎么做……任何建议都是超级好的。谢谢

我使用的是usecols=range(1,n),在此之前我已经检查(并使用)了行的长度。以下是所要求的文本文件示例

0 0 0 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 0 0
20 0 0 0 0 0 0 0 0 0 0
30 0 0 0 0 0 0 0 0 0 0
40 0 0 0 0 0 0 0 0 0 0
50 0 0 0 0 0 0 0 0 0 0
60 0 0 0 0 0 0 0 0 0 0
70 0 0 0 0 0 0 0 0 0 0
80 0 0 0 0 0 0 0 0 0 0
90 0 0 0 0 0 0 0 0 0 0
100 0 0 0 0 0 0 0 0 0 0
110 0 0 0 0 0 0 0 0 0 0
120 1 1 1 1 0 0 0 0 0 0
130 0 1 1 1 1 0 0 0 0 0
140 0 1 1 1 1 0 0 0 0 0
150 0 1 1 1 1 0 0 0 0 0
160 0 1 1 1 1 0 0 0 0 0
170 0 1 1 1 1 0 0 0 0 0
180 0 1 1 1 1 0 0 0 0 0
190 0 0 1 1 1 1 1 1 1 1

对我来说,它看起来可疑地像是在使用第一列来求和,但是如果我让它打印数据[0],例如,它打印出我的10个0,其他什么都没有,如果我打印数据[1],它会再给我10个0,而没有第一列。正如所料。

您的代码对我来说很好

import numpy as np
data = np.loadtxt('c:/temptemp/test.txt', usecols=range(1,11))
sdata = np.asfarray(np.sum(data,axis=1))
print(data)
print(sdata)
返回

[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  4.  4.  4.  4.  4.  4.  4.  8.]

所以,在经历了很多麻烦之后,我认为这是一个奇怪的虫子或者类似的东西,可能是在numpy

整个代码与其他位类似,都是在函数内部定义的,使数据变量成为局部变量。如果我让load函数和该函数中的所有其他位使用其他数组名而不是数据变量名,那么它将生成预期的结果。我已经仔细检查过了,没有全局覆盖,所以不确定为什么会发生这种情况。一定是一个附带案件

如果我只是将一个函数分解成一个完全独立的文件并单独运行代码,它也可以工作

简而言之,如果其他人有这个或类似的奇怪问题,请尝试使用另一个您根本没有使用过的数组变量名,它可能会消失


谢谢大家。

您能发布部分“test.txt”吗?您的.txt文件的每一行都有相同数量的值吗?更新以包含一些示例数据,是的,所有行都有相同数量的值。谢谢。很有趣,因为它与我的代码和文件相匹配,我很难理解为什么会这样。这就像在sum命令中没有忽略该列,而是在创建数据数组时…当我在轴0上求和时,它只返回10列。这是非常令人沮丧的。我很确定numpy中没有bug,因为您正在尝试做的是一件非常非常基本的事情。请查看上的第一个示例,并将StringIO与loadtxt结合使用,将一个完整的示例以及您的一些数据粘贴到您的问题中<代码>从io导入StringIO#StringIO的行为类似于文件对象>>>c=StringIO(“0 1\n2 3”)>>>np.loadtxt(c)数组([[0,1.],[2,3.]])我同意Joe的观点,但使用不同的数组解决了这个问题。当我有空闲时间时,我会用stringio对象调查emore。谢谢