代码之家  ›  专栏  ›  技术社区  ›  tuuttuut

Numpy数组传递值

  •  1
  • tuuttuut  · 技术社区  · 7 年前

    我有一个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 回复  |  直到 6 年前
        1
  •  7
  •   cs95 abhishek58g    7 年前

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

    但是,请记住 变换数组的numpy函数返回新的数组对象,保持原始对象不变。

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

        2
  •  0
  •   Ronan    7 年前

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