`,`在索引框中做什么?

时间:2017-05-28 18:42:09

标签: python

import matplotlib.pyplot as plt

plt.scatter(X[:50, 0], X[:50, 1],
            color='red', marker='o', label='setosa')

这段代码来自Python Machine Learning。 但我不明白X[:50, 0]X[:50, 1]的含义是什么?

我检查了另一个SO post的切片。但他们没有提到索引框中的,

2 个答案:

答案 0 :(得分:3)

instance[indice]语法触发instance.__getitem__调用indice作为参数。

此快捷方式还允许使用语法x:y:z来表示slice(x, y, z),这通常是如何使用的,但它也可以适用于其他类型的索引,如元组或字符串,只要您的__getitem__支持这些内容。

在这段代码中,它被用作numpy切片二维数组的一部分,元组包含每个维度的切片。

为了将来参考,您可以使用此课程进行测试:

>>> class sliced:
...     def __getitem__ (self, index):
...             print(index)

>>> d = sliced()

>>> d[:50, 1]
(slice(None, 50, None), 1)

对于该特定情况,逗号使索引成为元组(如果在REPL中键入,则为1, 2),其第一项是:50,其被评估为没有启动的切片,在50结束且未指定任何步骤(空格中的x:y:z符号填充None,并且不需要第二个:

答案 1 :(得分:0)

内置的python列表索引没有X[:50, 1]之类的东西。 numpy模块将此语法添加到它的数组类中。实际上这种类型的索引在MATLAB中引入。有关详细信息,请参阅here