我有一个简单的函数应该在数组的对角线上运行并将所有值都转为0.
def diagonal_zeros(dataset):
zero = dataset[:]
length = len(zero)
for i in range(length):
zero[i, i] = 0
return zero
当我在一个数组上运行此函数时,它会输出新的,正确的'零'数组,但它也会返回并覆盖原始数据集。'我以为行zero = dataset[:]
会阻止这一点。
但是,我没有使用此函数获得相同的行为:
def seperate_conditions(dataset, first, last):
dataset = dataset[first:last, :]
return dataset
使第一个数据集保持不变。我一直在阅读StackOverflow相关问题的答案,但我不能为我的生活弄清楚这一点。我正在研究科学分析管道,所以我真的希望能够在每一步都参考矩阵。
由于
答案 0 :(得分:1)
python中的参数由赋值传递(感谢@ juanpa.arrivillaga进行更正),而非值。这意味着通常函数不会收到参数的副本,而是一个"指针"论证本身。如果更改函数中参数引用的对象,则表示您正在修改外部的同一对象。 Here's a page with some more information
可能是使用函数内的copy module来创建数据集的副本。
例如,代码:
import copy
myDataset = [[1,2,3],[2,3,4],[3,4,5]]
def diagonal_zeros(dataset):
zero = copy.deepcopy(dataset)
length = len(zero)
for i in range(length):
zero[i][i] = 0
return zero
result = diagonal_zeros(myDataset)
print(result) #[[0, 2, 3], [2, 0, 4], [3, 4, 0]]
print(myDataset) #[[1, 2, 3], [2, 3, 4], [3, 4, 5]]
This article帮助了我很多这个概念。