Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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 索引器:索引无效_Python_Numpy - Fatal编程技术网

Python 索引器:索引无效

Python 索引器:索引无效,python,numpy,Python,Numpy,我试图从数据集中读取数据,我想要所有元素,除了序列中的最后一个元素。我将最后一个元素作为目标。我可以打印它,但当代码到达train=…时,我会得到以下错误:indexer错误:无效索引 dataset = np.genfromtxt(open(train_file,'r'), delimiter=',',dtype=None)[1:] target = [x[401] for x in dataset] train = [x[0:400] for x in dataset] 我还尝试了:[x[

我试图从数据集中读取数据,我想要所有元素,除了序列中的最后一个元素。我将最后一个元素作为目标。我可以打印它,但当代码到达
train=…
时,我会得到以下错误:
indexer错误:无效索引

dataset = np.genfromtxt(open(train_file,'r'), delimiter=',',dtype=None)[1:]
target = [x[401] for x in dataset]
train = [x[0:400] for x in dataset]
我还尝试了:
[x[:-1]用于数据集中的x]
,但我得到了相同的错误

数据集很大,但这是一个示例:


xxx,-0.011451,-0.070532,…,-0.011451,-0.070532,O

您的问题似乎在于理解列表理解是如何工作的,以及何时可能需要使用列表理解

列表理解贯穿于列表中的每一项,对其应用一个函数,并且可能过滤掉也可能不过滤掉其他元素。例如,如果我有以下列表:

digits = [1, 2, 3, 4, 5, 6, 7]
我使用了以下列表:

squares = [i * i for i in digits]
我会得到:
[1,4,9,16,25,36,49]

我也可以这样做:

even_squares = [i * i for i in digits if i % 2 == 0]
这会给我:
[4,16,36]

现在让我们特别谈谈你对清单的理解。您编写了
[x[401]for x in dataset]
,在英语中,它的意思是“一个列表,包含名为dataset的列表中每个项目的第401个元素”

现在,在所有的可能性中,数据集的每一行中没有超过402个项目,这意味着,当您尝试访问每一行的第401个元素时,您会得到一个错误

听起来您只是想获取
数据集中的所有元素,不包括最后一个元素。为此,可以使用python的切片表示法。如果您编写
数据集[:-1]
,您将获得数据集中除最后一项之外的所有项目。类似地,如果您编写了
数据集[:-2]
,您将获得除最后两项之外的所有项目,依此类推。如果您想切掉列表的前面,也可以这样做:
dataset[1:-1]
将为您提供列表中的所有项目,不包括第0个和最后一个项目

编辑:
现在我在你的帖子上看到了新的评论,很明显你正在尝试获取数据集中每个项目的前401个元素。不幸的是,因为我们对您的数据集一无所知,所以不可能确切地说出问题所在。

我只是用下面的玩具代码对此进行了测试。您的语法实际上是正确的。输入文件有问题,而不是从数组列表中选择元素的方式有问题

from numpy import *

a = array(range(1,403))

dataset = []
for i in range(5):
    dataset.append(a)

target = [x[401] for x in dataset]
train = [x[0:400] for x in dataset]

数据集[:-1]
有什么问题?因为需要数据集中所有元素的前401个元素。数据集是列表的数组。这可能是因为当你到达
train
时,你在文件的末尾,所以
x
None
?什么是
genfromtxt
?如果你找到一个不同的措辞而不是“一旦击中火车,就会弹出这个错误”,可能会有所帮助,因为这绝对没有意义。你可以尝试更长的代码样本和回溯。你搞错了。我每行有402个项目。我可以毫无问题地通过并获取数据集中x的
[x[401]
。当我执行
数据集[:-1]
时,我得到了那个错误。@尼克,你能给我们提供更多的信息吗?一个好的开始应该是错误消息的其余部分。没有错误消息的其余部分。它将给我这个错误并退出。我想可能和numpy有关。我还添加了一个数据示例,但它太大,无法复制到这里。@Nick您的列可能有不同的数据类型吗?这可能会导致这个问题。嗯,除了最后一列之外,我的列都是数字。第一个是整数(0或1或2),接下来的400个是负数和正数,最后一个是字符串。奇怪的是,当我用
dataset=list(csv.reader(open(train_file,'rU'))测试数据时,
我没有得到任何错误。真奇怪。我有另一个数据集可以很好地使用np.genfromtxt