список неправильно добавлен после нескольких итераций в python - PullRequest
0 голосов
/ 12 февраля 2020

Вот мой python код:

import numpy as np
import copy

x_input = np.array([[ 0.0000000,    0.0000000,  0.0000000],
                    [ 0.7570000,    0.5860000,  0.0000000]])

x_input_ = np.array([[ 0.0000000,   0.0000000,  0.0000000],
                    [ 0.7570000,    0.5860000,  0.0000000]])

# x_input_ = copy.deepcopy(x_input)

delta = 0.1
xlist = []
for i in range(len(x_input)):
    for j in range(np.shape(x_input)[1]):
            print(i,j)
            print (x_input)
            x_input[i,j] = x_input[i,j] + delta
            print(x_input)
            xlist.append(x_input)
            print('xlist:')
            print(xlist)
            x_input = x_input_
print(xlist)         

Вопрос: почему при i = 0, j = 2 итерации добавленная xlist неверна? Однако при i = 0, j = 0 и i = 0, j = 1, xlist является правильным.

1 Ответ

0 голосов
/ 12 февраля 2020

Ваш список содержит одну ссылку на массив, который первоначально назывался x_input, и еще пять ссылок на массив x_input_ (с завершающим подчеркиванием).

Если вы хотите, чтобы каждый раз использовались отдельные ссылки, Вы, вероятно, хотите копировать массив, а не просто ссылаться на него повторно. Я не совсем уверен, какой результат вы ожидаете.

Если вы хотите кумулятивные результаты, так что каждый последующий массив в списке является предыдущим массивом с добавлением, измените строку append на:

xlist.append(copy.deepcopy(x_input))

И избавьтесь от последней строки в l oop, где вы перепривязываете x_input.

Если вы вместо этого хотите, чтобы каждый массив имел только одно изменение от исходного значения (a по-разному для каждого), оставьте дополнение как есть, и вместо этого измените последнюю строку l oop на:

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