Передача массивов в качестве входных данных для пользовательских функций - PullRequest
0 голосов
/ 29 января 2019

Если вы хотите передать векторы (или массивы) в качестве входных данных для некоторой пользовательской функции, чтобы выполнить некоторые операции с ними, вы можете передать компоненты:

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 голосов
/ 29 января 2019

В вашем конкретном случае нет абсолютно никакой разницы между двумя выходами, когда вы связываете результаты с 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].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...