...但是更改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))
,则这次可以正常工作。但是我想知道为什么不返回数组就无法工作吗?
答案 0 :(得分:3)
从文档(numpy.reshape):
如果可能,这将是一个新的视图对象;否则,它将是 复制。请注意,不能保证内存布局(C-或Fortran- 连续的)。
与arr = arr / 10
相对,后者会进行复制并重新分配。
显然,当离开范围时,视图丢失了。
答案 1 :(得分:0)
尝试从函数返回数组并将返回的值分配给所需的变量:
return arr # The last string of your function
arr = reshapeArray(arr)