Numpy array pass-by-value

╄→尐↘猪︶ㄣ 提交于 2019-12-10 11:54:22

问题


I have a numpy array that is changed by a function. After calling the function I want to proceed with the initial value of the array (value before calling the modifying function)

# Init of the array
array = np.array([1, 2, 3])

# Function that modifies array
func(array)

# Print the init value [1,2,3]
print(array)

Is there a way to pass the array by value or am I obligated to make a deep copy?


回答1:


As I mentioned, np.ndarray objects are mutable data structures. This means that any variables that refer to a particular object will all reflect changes when a change is made to the object.

However, keep in mind that most numpy functions that transform arrays return new array objects, leaving the original unchanged.

What you need to do in this scenario depends on exactly what you're doing. If your function modifies the same array in place, then you'll need to pass a copy to the function. You can do this with np.ndarray.copy.




回答2:


You could use the following library (https://pypi.python.org/pypi/pynverse) that inverts your function and call it, like so :

from pynverse import inversefunc

cube = (lambda x: x**3)
invcube = inversefunc(cube)

arr = func(arr)

In [0]: arr
Out[0]: array([1, 8, 27], dtype=int32)

In [1]: invcube(arr)
Out[1]: array([1, 2, 3])


来源:https://stackoverflow.com/questions/47893884/numpy-array-pass-by-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!