12
通常numpy強制任務的左側和右側匹配,所以例如如果我做a[:] = b
,b
必須是相同的形狀或廣播爲a
相同的形狀。但似乎是一個例外,該規則:Numpy花哨的索引和任務
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = a.copy()
>>> a[[0,1,2]] = b[::2]
>>> a
array([0, 2, 4, 3, 4, 5, 6, 7, 8, 9])
>>> a[np.arange(10)] = b[:2]
>>> a
array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])
它似乎只與一維數組且僅當出現在賦值的左側看中索引工作,但我一直沒能找到任何地方的這種行爲文檔。這種行爲是否記錄在案,如果有的話,還有人可以舉例說明何時可能有用嗎?
更新:
看來,numpy的flatiter類型的行爲也是這樣的,有flatiter和花哨的索引,我不知道之間有着某種聯繫?
>>> a.flat = [10,11]
>>> a
array([10, 11, 10, 11, 10, 11, 10, 11, 10, 11])
>>> a.flat[:] = [2,3,4]
>>> a
array([2, 3, 4, 2, 3, 4, 2, 3, 4, 2])
>>> a.flat = range(100)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
您正確地描述了此功能 - 僅在與一維陣列上的高級索引結合使用分配時才允許它。雖然我確定在文檔中閱讀了這些內容,但目前我找不到鏈接。我覺得現在和當時有用,不過我認爲如果這是由專用功能支持並且定期分配仍然會給出錯誤,情況會更好。 – 2012-02-24 01:39:02
對,我很快認爲它只是廣播,但我現在看到它實際上並不符合廣播要求!奇怪的! – wim 2012-02-24 03:20:46
我不確定它是一個功能還是一個bug ......至少,http://docs.scipy.org/doc/numpy/reference/internals.code-explanations.html#getting-or-setting似乎不是把這作爲一個特例提及。 – Tanriol 2012-02-28 20:26:32