Почему результат отличается, несмотря на то, что код точно такой же?

#python #function #numpy

#python #функция #numpy

Вопрос:

Я хочу создать функцию, которая суммирует два массива numpy в новый массив тогда и только тогда, когда различные индексы являются euqal .

 x = np.array([2,1,1,1])
y=np.array([2,1,0,1])   

overlap = np.zeros(4)
for i in range(0,len(x)):
    if x[i] == y[i]:
        overlap[i]= x[i] y[i]

print(overlap)
[4. 2. 2. 2.]
 

Это сработало, как и ожидалось. Теперь я хочу определить функцию, но результат отличается, несмотря на то, что код точно такой же.

     def sum_overlap(x,y):
       overlap = np.zeros(4)
       for i in range(0,len(x),1):
           if x[i] == y[i]:
              overlap[i] = x[i]   y[i]
              print(overlap)

sum_overlap(x,y)
[4. 0. 0. 0.]
[4. 2. 0. 0.]
[4. 2. 2. 0.]
[4. 2. 2. 2.]
 

Я думаю, что это как-то связано с итератором, но я не могу понять это.

Комментарии:

1. Вы печатаете несколько раз, но конечный результат один и тот же. И разве вы return не должны этого делать?

Ответ №1:

Ваш оператор print находится в цикле, поэтому каждый раз, когда он вызывается, он выводит список. Извлеките оператор print из цикла, но оставайтесь в функции, и ваши выходные данные должны быть одинаковыми

Ответ №2:

Рабочий код:

 def sum_overlap(x,y):
    overlap = np.zeros(4)
    for i in range(0,len(x),1):
        if x[i] == y[i]:
            overlap[i] = x[i]   y[i]
    return overlap