2017-05-28 21 views
1
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中的切片。但是他們沒有在索引框中提到,

+0

該符號是['numpy']的特有符號(https://docs.scipy.org/doc/numpy-1.12.0/reference/arrays.indexing.html#basic-slicing-and -indexing) –

+0

@MosesKoledoye這個符號是由numpy實現的,但任何類都可以利用它,正如Uriel的答案所示。 –

+0

@MosesKoledoye雖然它是由python支持,並沒有用在任何地方,但'numpy' –

回答

3

instance[indice]語法以indice作爲參數觸發instance.__getitem__的呼叫。

此快捷方式還允許使用的語法x:y:z的代表slice(x, y, z),這通常是如何使用它,但它可以還配備了其他類型的索引,像元組或字符串,只要你__getitem__支持這些。

在此代碼中,它用作numpy切片2維數組的一部分,元組包含每個維度的切片。


對於未來的參考,你可以用這個類測試:

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

>>> d = sliced() 

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

該特定情況下,逗號使得指數的元組(如1, 2會如果鍵入的REPL),其第一項目是:50,它被評估爲沒有開始的片段,結束於50且沒有指定步驟(x:y:z符號填充空白中的None,並且不需要第二個:)。

+1

@roganjosh切片有啓動,停止和步驟參數。如果不存在,它們默認爲None。 –

+0

由於問題是關於逗號的,因此您可能需要特別指出逗號使索引成爲一個元組。 –

+0

@MarkTolonen澄清,謝謝! – Uriel

0

內置python列表索引不像X[:50, 1]numpy模塊將此語法添加到它的數組類中。實際上這種類型的索引引入MATLAB。有關更多信息,請參見here

相關問題