重塑函数中的numpy数组不起作用

时间:2019-08-20 09:46:33

标签: python numpy

...但是更改numpy数组的值有效:

import numpy as np

def reshapeArray(arr):
    arr = arr.reshape((2, 2))
    arr /= 10
    print(arr) # prints [[0.1 0.3], [0.2 0.4]]

arr = np.array([1, 2, 3, 4], dtype=np.float32)
reshapeArray(arr)
print(arr) # prints [0.1 0.2 0.3 0.4]

reshapeArray()函数会永久更改数组的值,但会临时更改数组的形状。如果我在函数的末尾添加返回行(return arr),并将函数的输出分配给数组(arr = reshapeArray(arr)),则这次可以正常工作。但是我想知道为什么不返回数组就无法工作吗?

2 个答案:

答案 0 :(得分:3)

从文档(numpy.reshape):

  

如果可能,这将是一个新的视图对象;否则,它将是   复制。请注意,不能保证内存布局(C-或Fortran-   连续的)。

arr = arr / 10相对,后者会进行复制并重新分配。

显然,当离开范围时,视图丢失了。

答案 1 :(得分:0)

尝试从函数返回数组并将返回的值分配给所需的变量:

    return arr  # The last string of your function

arr = reshapeArray(arr)