Numpy 数组按值传递

Numpy array pass-by-value

我有一个由函数更改的 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)

有没有办法按值传递数组,还是我必须进行深拷贝?

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

但是,请记住 大多数 转换数组的 numpy 函数 return 新数组对象,保持原始数组不变。

在这种情况下您需要做什么完全取决于您在做什么。如果您的函数就地修改同一个数组,那么您需要将副本传递给该函数。你可以用 np.ndarray.copy.

来做到这一点

您可以使用以下库 (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])