1

我有一个从文本文件构造的 NumPy 数组。我已经这样做了好几个星期了,以前从未见过这个问题。

print data
print data[:, 1:]

输出

[['1', '200', '300', '400', '500\n']
 ['3', '500', '400', '200', '1000\n']
 ['14', '900', '200', '300', '100\n'] ...,
 ['999142', '24', '21', '20', '12\n']]
Traceback (most recent call last):
File ...., line ..., in ....
print data[:, 1:]
IndexError:  too many indices

为什么会发生这种情况,我该如何解决?

编辑:大线索。 data.shape没有(3313869,)第二个值。

data.ndim1

len(data[1])然而,是 5。

编辑,我正在构建它

data = [re.split(' ', line) for line in f]
f.close()
data = np.array(data)

当我插话

f.close()
print data[0:10]

它给了即

[['1', '200', '300', '400', '500\n'], ['3', .... ]]

4

2 回答 2

1

问题发生是因为您的代码以某种方式创建了numpy.array对象。看到这个问题有类似的问题。当它发生时,你会得到类似的东西:

a = numpyp.array([list1, list2, list3, ... , listn], dtype=object)

它是一个一维数组,但是当您要求打印时,它会调用__str__里面的每个列表,给出:

[[ 1, 2, 3, 4],
 [ 5, 6, 7, 8]]

这看起来像一个二维数组。

你可以模拟它做:

a = ['aaa' for i in range(10)]
b = numpy.empty((5),dtype=object)
b.fill(a) 

让我们检查一下b

b.shape # (5,)
b.ndim  # 1

print b给出:

[['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']
 ['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']
 ['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']
 ['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']
 ['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']]

相当棘手...

于 2013-06-11T18:17:13.543 回答
0

我解决了这个问题

for line in data:
          if (len(line) != 5):
                  print len(line)
                  print line

我数据中的几行末尾有空格,这导致500并被\n分成单独的标记。这是因为在星期五,我最后一次弄乱这段代码时,我在 Python 脚本中添加了一个默认选项,该选项为缺少特定值的行构建该脚本的输入文件,并且 Vim 放入了一个空格换行符上的标记,恰好在之前的字符上\n

[re.split(' ', line.replace('\n', '').rstrip()) for line in f]给出欲望的结果。

我认为,NumPy 将数组视为一维和二维(允许我选择data[1]一行)有点奇怪,但我猜如果行的长度不一致,它只会将其视为数组数组而不是二维数组,从而区分两者。

于 2013-06-10T20:44:20.920 回答