在不使用“return”python的情况下修改该函数外部的参数的函数

时间:2018-06-04 18:31:39

标签: python python-2.7 numpy

我使用python 2.7。 假设我有一个数组X和一个以这个数组为中心的函数:

import numpy as np
X = np.array([[float(i+j) for i in range(3)] for j in range(3)])

如果我们此时打印X

X = array([[ 0.,  1.,  2.],
           [ 1.,  2.,  3.],
           [ 2.,  3.,  4.]])

现在让我们计算均值(根据每一列)并根据第j列的平均值编写使每个X[i,j]居中的函数。

means = X.means(axis=0) #mean for each column

我们打印means = array([ 1., 2., 3.])(似乎是合法的)。

def center(arr, means) :
    for i, mean in enumerate(means) :
        arr[:, i] -= mean
    # Instructions
    # end of the function without return X or something

让我们在Xcenter(X)上调用此功能,然后重新打印X,其中一个会:

X = array([[-1., -1., -1.],
           [ 0.,  0.,  0.],
           [ 1.,  1.,  1.]])

因此,X被修改,但不应该被修改,因为它不会被返回。

我的问题有两个:1 - 为什么X在函数之外被修改而我不返回2-有没有什么可以做的,以避免可能导致大混乱的修改

我找到的解决方案是在np.copy循环之前arr forcenter函数内部),并处理副本以保持{{1}原样。

请注意,处理int或float时不会出现此问题。

PS:我认为问题依赖于数组的存储方式以及用Python进行广播的方式,但我相信有一种方法可以更好地控制它

感谢您的时间

0 个答案:

没有答案