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