Как заменить элемент дублирующего массива, не нарушая исходного? - PullRequest
0 голосов
/ 28 октября 2019

Я новичок в питоне, и это меня озадачивает на некоторое время.

Я написал код ниже:

pool = np.array([[1,1],[1,1]])

def ringDisc(data):
    data_new = data
    data_new[1] = 0
    return data_new

print(pool)
print(ringDisc(pool))
print(pool)

Я ожидаю, что результат должен быть [[1,1],[1,1]] для первого "print" и [[1,1],[0,0]] для второго "print" и [[1,1],[1,1]]для последней.

Но что я получил от этого, это [[1,1],[1,1]];[[1,1],[0,0]];[[1,1],[0,0]].

Кто-нибудь может мне помочь с этим и объяснить, почему мой код не работает так, как я хочу? Большое спасибо!

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Вы можете сделать следующее:

data_new = np.copy(data)

Внутри ringDisc

Таким образом, с этим изменением код выглядит следующим образом:

import numpy as np

pool = np.array([[1, 1], [1, 1]])


def ringDisc(data):
    data_new = np.copy(data)
    data_new[1] = 0
    return data_new


print(pool)
print(ringDisc(pool))
print(pool)

Результат:

[[1 1], [1 1]]
[[1 1], [0 0]]
[[1 1], [1 1]]

Как и ожидалось.

0 голосов
/ 28 октября 2019

В numy views и copy это две разные концепции, в вашем случае вы хотите изменить копию ваших данных. Интересная статья об этом .

Как уже упоминалось @Rafael, вы можете сделать что-то вроде этого.

pool = np.array([[1,1],[1,1]])

def ringDisc(data):
    data_new = np.copy(data) # <===== Here 
    data_new[1] = 0
    return data_new

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