将数组作为输入传递给用户定义的函数

时间:2019-01-28 23:50:45

标签: python numpy scipy

如果要将矢量(或数组)作为输入传递给某些用户定义的函数以对其进行某些操作,则可以传递组件:

def sample(X_0,Y_0)
    #here X_0 and Y_0 are some components of the arrays X and Y
    #do some operations with those components of X and Y like
    scalar= X_0+Y_0
    return scalar
number=sample(X[0,0],Y[0,0])

或传递向量并在函数内部分解:

def sample(X,Y)
    #here X and Y are arrays
    #do some operations like
    scalar=X[0,0]+Y[0,0]
    return scalar
number=sample(X,Y)

这是首选方法,为什么?

1 个答案:

答案 0 :(得分:0)

在您的特定情况下,将结果绑定到scalar时,两个输出之间绝对没有区别。在python中,您倾向于按引用传递数组和列表,按值传递基元。那么什么时候可以期望看到不同呢?

考虑功能:

>>> def manipulateX(X):
...     X[len(X)-1] = -1
...     return X
... 

调用带有列表的manipulateX(如下所示)时,您会发现该列表也受到了操纵:

>>> x = [1, 2, 3, 4]
>>> manipulateX(x)
[1, 2, 3, -1]
>>> x
[1, 2, 3, -1]

但是,如果您定义了对基本类型进行操作的函数

>>> def manipulateY(Y):
...     Y += 20
...     return Y
... 

并使用集合中的项目(列表,数组)等调用它:

>>> manipulateY(x[0])
21
>>> x
[1, 2, 3, -1]
>>> 

您看到x[0]保持不变。就您而言,将结果绑定到scalar时,看不到任何区别。在这两种情况下,您的内存使用情况也相同。如果您没有将结果绑定到scalar,则取决于是否要忽略x[0]y[0]