将索引列表传递给Python中的另一个列表。语法正确吗?

问题描述 投票:2回答:2

所以我有来自sklearn的以下代码:

>>> from sklearn import cross_validation
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
>>> y = np.array([1, 2, 3, 4])
>>> kf = cross_validation.KFold(4, n_folds=2)
>>> len(kf)
2
>>> print(kf)  
sklearn.cross_validation.KFold(n=4, n_folds=2, shuffle=False,
                           random_state=None)
>>> for train_index, test_index in kf:
...    print("TRAIN:", train_index, "TEST:", test_index)
...    X_train, X_test = X[train_index], X[test_index]
...    y_train, y_test = y[train_index], y[test_index]
TRAIN: [2 3] TEST: [0 1]
TRAIN: [0 1] TEST: [2 3]
.. automethod:: __init__

当我在这些代码行中传递train_index和test_index时,给我一个错误(IndexError:索引越界):

...    X_train, X_test = X[train_index], X[test_index]
...    y_train, y_test = y[train_index], y[test_index]

为什么不能将索引列表传递给列表?将索引列表传递到另一个列表以获取该列表中那些元素的正确语法是什么?

我正在使用Python 2.7。

谢谢。

python syntax
2个回答
3
投票

与Numpy数组不同,python列表不支持通过多个索引进行访问。

尽管使用列表推导很容易解决:

l= range(10)
indexes= [1,3,5]
result= [l[i] for i in indexes]

或者稍微不太可读(但在某些情况下更有用)的地图:

result= map(l.__getitem__, indexes)

但是,正如Ashwini Chaudhary指出的,示例中的Xy are numpy数组,因此您输入了错误的示例代码,或者您的特定索引确实超出范围。] >


0
投票

您也可以使用:

© www.soinside.com 2019 - 2024. All rights reserved.