python - 修改该函数之外的参数而不使用“返回”python的函数
问题描述
我使用python 2.7。假设我有一个数组 X 和一个根据 mean 将该数组居中的函数:
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.]])
现在让我们计算平均值(根据每列)并编写X[i,j]
根据第 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
X
让我们在:上调用这个函数center(X)
,然后再次打印X
,将会有:
X = array([[-1., -1., -1.],
[ 0., 0., 0.],
[ 1., 1., 1.]])
所以,X
被修改了,而它不应该被修改,因为它没有被返回。
我的问题是双重的: 1-为什么 X 在函数之外被修改而我不返回它 2- 有什么办法可以避免这种可能导致大混乱的修改
我找到的解决方案是np.copy
在循环arr
之前(在函数内部),并处理副本以保持原样。for
center
X
请注意,在处理 int 或 float 时不会出现此问题。
PS:我认为问题取决于数组的存储方式以及在 Python 中进行广播的方式,但我相信有一种方法可以更好地掌握它
谢谢你的时间
解决方案
推荐阅读
- php - 我的目标是将 html_block 添加到 Shop 和 ALL 类别。电子商务
- r - 具有 ANOVA 拟合解释的 Post-Hoc Games Howell
- android - 特殊字符 = 使用改造调用 API 后转换为 %3D
- javascript - 如何在cypress中复制价值并找到用户
- c - pallindrome 程序不工作请检查附加的代码和输出
- r - ifelse() and cell original value in R
- python-3.x - logging while using exponential back off retry in python
- php - 未找到 findOrFail Laravel 8 方法
- spring-boot - Deprecated configuration property 'spring.datasource.initialization-mode'
- flutter - How to display multiple notifications in flutter