Поэтапная операция с Python в функции - PullRequest
0 голосов
/ 30 апреля 2018

В python я пытаюсь изменить значения массива np внутри функции

def function(array):
    array = array + 1
array = np.zeros((10, 1))
function(array)

Для массива в качестве параметра функции он должен быть ссылкой, и я должен иметь возможность изменять его содержимое внутри функции.

array = array + 1 выполняет поэлементную операцию, которая добавляет один к каждому элементу в массиве, поэтому он изменяется внутри значений.

Но массив фактически не меняется после вызова функции. Я предполагаю, что программа думает, что я пытаюсь изменить саму ссылку, а не содержимое массива, из-за синтаксиса поэлементной операции. Есть ли способ заставить его выполнять намеченное поведение? Я не хочу перебирать отдельные элементы или заставлять функцию возвращать новый массив.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Другим решением, если вы хотите изменить содержимое вашего массива, является использование этого:

array[:] = array + 1
0 голосов
/ 30 апреля 2018

Эта строка:

array = array + 1

… выполняет поэлементную операцию, но она выполняет создание нового массива с каждым приращенным элементом. Присвоение этого массива обратно локальной переменной array ничего не даст, потому что эта локальная переменная скоро исчезнет, ​​и вы ничего не сделали, чтобы изменить глобальную переменную с тем же именем,

С другой стороны, эта строка:

array += 1

… выполняет поэлементную операцию приращения всех элементов на месте, что, вероятно, вам здесь и нужно.


В Python изменяемые коллекции разрешены только , а не требуется , чтобы обрабатывать оператор += таким образом; они могут обрабатывать это так же, как array = array + 1 (как неизменяемые типы, такие как str). Но встроенные типы, такие как list, и наиболее популярные сторонние типы, такие как np.array, делают то, что вы хотите.

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