【问题标题】:python element wise operation in function函数中的python元素明智操作
【发布时间】:2018-04-30 11:45:48
【问题描述】:

在 python 中,我试图改变函数内 np 数组的值

def function(array):
    array = array + 1
array = np.zeros((10, 1))
function(array)

数组作为函数参数,应该是一个引用,我应该可以在函数内部修改它的内容。

array = array + 1 执行元素操作,将数组中的每个元素加一,因此它会更改内部值。

但函数调用后数组实际上并没有改变。我猜测程序认为我正在尝试更改引用本身,而不是数组的内容,因为元素明智操作的语法。有没有办法让它做预期的行为?我不想遍历单个元素或让函数返回新数组。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    这一行:

    array = array + 1
    

    ... 确实执行元素操作,但它执行的操作是创建一个新数组,每个元素递增。将该数组分配回局部变量array 没有任何用处,因为该局部变量即将消失,而您还没有做任何事情来更改同名的全局变量,

    另一方面,这一行:

    array += 1
    

    ... 执行原地递增所有元素的元素操作,这可能是您想要的。


    在 Python 中,可变集合仅允许,而不是必需,以这种方式处理+= 语句;他们可以以与array = array + 1 相同的方式处理它(就像str 这样的不可变类型一样)。但是像list 这样的内置类型,以及像np.array 这样的最流行的第三方类型,可以做你想做的事。

    【讨论】:

      【解决方案2】:

      如果您想更改数组的内容,另一种解决方案是使用这个:

      array[:] = array + 1
      

      【讨论】:

        猜你喜欢
        • 2022-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-08
        • 1970-01-01
        • 2018-08-30
        • 2023-03-25
        • 1970-01-01
        相关资源
        最近更新 更多