Numpy数组按值传递

时间:2017-12-19 19:24:43

标签: python arrays numpy move-semantics

我有一个由函数更改的numpy数组。 调用函数后,我想继续使用数组的初始值(调用修改函数之前的值)

# 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)

有没有办法按值传递数组,还是我有义务制作深层副本?

2 个答案:

答案 0 :(得分:3)

正如我所提到的,np.ndarray对象是可变数据结构。这意味着引用特定对象的任何变量都将反映对对象进行更改时的更改。

但是,请记住,转换数组的大多数 numpy函数会返回新的数组对象,而原始文本保持不变。

在这种情况下,您需要做的事情取决于您正在做什么。如果您的函数修改了相同的数组,那么您需要将副本传递给函数。您可以使用np.ndarray.copy执行此操作。

答案 1 :(得分:0)

您可以使用以下库(https://pypi.python.org/pypi/pynverse)来反转您的功能并调用它,如下所示:

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])