Numpy sum行...得到奇怪的结果

时间:2018-03-14 22:22:41

标签: 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.0000000e + 00,1.00000000e + 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],例如它打印出我的十个0而没有别的,如果我打印数据[1]它给了我另外十个0,没有第一列。正如预期的那样。

2 个答案:

答案 0 :(得分: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.]

答案 1 :(得分:0)

因此,经过多次捣乱后,我认为这是一个奇怪的错误或类似的东西,可能是numpy。

这整个代码类似于其他位,都在函数内部定义,使数据变量本地化。如果我使用load函数和此函数中的所有其他位使用其他数组名而不是数据变量名,那么它会产生预期的结果。我已经仔细检查了,并且没有全局覆盖它,所以不确定它为什么会发生。必须是一个边缘案件。

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

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

谢谢大家。