NumPy - 分配给函数返回的视图

假设我有NumPy ND 数组和一个返回 的任何复杂视图的a函数,以及与具有相同形状的数组。f(a)vabv


b分配给的最简单方法是什么v?两者都可以是多维的。


最简单的尝试(例如在下一个代码中分配给函数的返回值)失败并出现错误SyntaxError: can't assign to function call::


import numpy as np

a, b = np.arange(10), np.arange(2)

a[2:4] = b # Working

f = lambda a: a[2:4] # Returns any view of a

f(a) = b # Not working, syntax error

根据任务,不允许将数组b参数传递给函数f,函数本身应该是未修改的。


12345678_0001
浏览 130回答 3
3回答

达令说

f(a)[...] = b

哔哔one

在尝试寻找解决方案之前,请确保您了解问题。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&nbsp; File "<ipython-input-30-df88b52b4d3c>", line 1&nbsp; &nbsp; f(a) = b&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^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] = bIn [34]: a.__setitem__(slice(2,4),b)In [35]: aOut[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]] = bIn [39]: a.__setitem__([0,2],b)如果这不起作用:In [40]: a[[0,2]][...] = b因为它实际上是a.__getitem__([0,2]).__setitem__(Ellipsis,b)。set 修改 get 生成的副本。仅当第一个索引生成view.

米琪卡哇伊

我刚刚想出了一个最简单的解决方案,它适用于除 0 维数组(标量)之外的任何 ND 情况:f(a)[:]&nbsp;=&nbsp;b
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python