以下是代码及相关文档(http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html#sklearn.datasets.load_iris),我对这一行感到困惑,data.target[[10, 25, 50]]
,为什么使用双[[]]
感到困惑,如果有人能澄清,那就太棒了
from sklearn.datasets import load_iris
data = load_iris()
print data.target[[10, 25, 50]]
print list(data.target_names)
提前谢谢,
林
答案 0 :(得分:1)
你的困惑是可以理解的:这不是标准"无论如何都是Python。
在这种情况下, data.target
是来自numpy的ndarray
:
In [1]: from sklearn.datasets import load_iris
...: data = load_iris()
...: print data.target[[10, 25, 50]]
...: print list(data.target_names)
[0 0 1]
['setosa', 'versicolor', 'virginica']
In [2]: print type(data.target)
<type 'numpy.ndarray'>
numpy的ndarray实现允许您通过提供所需项目的索引列表来创建新数组。例如:
In [13]: data.target
Out[13]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
In [14]: data.target[1]
Out[14]: 0
In [15]: data.target[[1,2,3]]
Out[15]: array([0, 0, 0])
In [16]: print type(data.target[[1,2,3]])
<type 'numpy.ndarray'>
并且可能由overriding __getitem__
完成。
有关详细信息,请参阅NumPy阵列文档中的Indexing:
答案 1 :(得分:1)
这是使用&#34;整数索引&#34;从numpy数组A
中检索元素。语法(与通常的下标相对),即整数列表B
将用于查找A
中那些特定索引的元素。您的输出是一个numpy数组,其形状与您用作&#34;输入&#34;的列表B
相同,输出元素的值是从A
的值获得的那些整数指数,例如:
>>> import numpy
>>> a = numpy.array([0,1,4,9,16,25,36,49,64,81])
>>> a[[1,4,4,1,5,6,6,5]]
array([ 1, 16, 16, 1, 25, 36, 36, 25])
整数索引可以应用于多个维度,例如:
>>> b = numpy.array([[0,1,4,9,16],[25,36,49,64,81]]) # 2D array
>>> b[[0,1,0,1,1,0],[0,1,4,3,2,3]] # row and column integer indices
array([ 0, 36, 16, 64, 49, 9])
或者,相同的示例但是具有 2 维度的输入列表,影响输出形状:
>>> b[[[0,1,0],[1,1,0]],[[0,1,4],[3,2,3]]] # "row" and "column" 2D integer arrays
array([[ 0, 36, 16],
[64, 49, 9]])
另请注意,您可以执行&#34;整数索引&#34;使用numpy数组,而不是列表,例如
>>> a[numpy.array([0,3,2,4,1])]
array([ 0, 9, 4, 16, 1])