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.
添加回答
举报