Работа в одной матрице, но матрица SOURCE изменяется - PullRequest
0 голосов
/ 05 августа 2020

Вот моя проблема: у меня есть одна n-мерная матрица (numpy массив), длинная ось которой содержит нужные мне данные.

Мне нужно нормализовать каждую запись матрицы. Например, для такой матрицы:

[1 2 3]
[2 3 4]
[7 8 9]
[3 2 1]

мне нужно было бы нормализовать каждый столбец индивидуально.

В моем коде я работаю с 3-мерным массивом, поэтому он выглядит вот так:

to_plot_OFF = FFT_OFF

for row, element in enumerate(to_plot_OFF):
    for col, element_c in enumerate(element):
    to_plot_OFF[row][col] = element_c/np.max(abs(element_c[10:250]))
to_plot_OFF = np.transpose(to_plot_OFF)

Где мои исходные данные содержатся в FFT_OFF (который я не sh изменять), а обработанные данные находятся в to_plot_OFF.

Я использую первую строку для получения нужной мне формы матрицы. L oop нормализует каждый столбец данных индивидуально.

Однако проблема в том, что в конце l oop обе матрицы (to_plot_OFF и FFT_OFF) идентичны (за исключением для транспозиции)! Хуже того, матрица FFT_OFF каким-то образом изменяется в течение l oop, и ее записи нормализуются.

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

a = np.array([1,2,3])
b = a
b = b/np.max(b)

Это не изменяет переменную a.

Может ли кто-нибудь дать некоторое представление о том, что здесь происходит? Я подозреваю, что это связано с первой строкой, где я пишу to_plot_OFF = FFT_OFF. Однако не следует ли этой строке выделять новый блок в памяти для матрицы to_plot_OFF вместо того, чтобы просто объявлять указатель на тот же адрес памяти FFT_OFF?

Любая помощь будет принята с благодарностью.

Спасибо!

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