3 回答

TA貢獻1854條經驗 獲得超8個贊
在嘗試尋找解決方案之前,請確保您了解問題。
In [27]: a, b = np.arange(10), np.arange(2)
In [28]: f = lambda a: a[2:4]
In [29]: f(a)
Out[29]: array([2, 3])
In [30]: f(a) = b
File "<ipython-input-30-df88b52b4d3c>", line 1
f(a) = b
^
SyntaxError: can't assign to function call
這個錯誤是 Python 的一個基本錯誤。語法問題。
但是看看當我們使用索引時會發生什么。
您所做的切片f是:
In [31]: a[2:4]
Out[31]: array([2, 3])
In [32]: a.__getitem__(slice(2,4))
Out[32]: array([2, 3])
所需的分配切片是:
In [33]: a[2:4] = b
In [34]: a.__setitem__(slice(2,4),b)
In [35]: a
Out[35]: array([0, 1, 0, 1, 4, 5, 6, 7, 8, 9])
請注意,setitemtakeb作為參數。 a.__setitem__(slice(2,4))=b會遇到同樣的語法錯誤。
這種用法setitem允許我們使用高級索引(列表):
In [38]: a[[0,2]] = b
In [39]: a.__setitem__([0,2],b)
如果這不起作用:
In [40]: a[[0,2]][...] = b
因為它實際上是a.__getitem__([0,2]).__setitem__(Ellipsis,b)。set 修改 get 生成的副本。僅當第一個索引生成view.
添加回答
舉報