Заменить запись в конкретном массиве numpy, хранящемся в словаре - PullRequest
1 голос
/ 11 июня 2019

У меня есть словарь, содержащий переменное количество числовых массивов (одинаковой длины), каждый массив хранится в соответствующем ключе.

Для каждого индекса я хочу заменить значение в одном из массивов на новое вычисленное значение.(Это очень простая версия, которую я на самом деле делаю.)

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

Извините, если форматирование примера кода сбивает с толку, это мой первый вопрос здесь (не совсем понимаю, как правильно показать строку example_dict["key1"][idx] = idx+10 с отступом в следующей строке дляцикл ...).

>>> import numpy as np 

>>> example_dict = dict.fromkeys(["key1", "key2"], np.array(range(10)))

>>> example_dict["key1"]

массив ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> example_dict["key2"]

массив ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> for idx in range(10):
    example_dict["key1"][idx] = idx+10



>>> example_dict["key1"]

массив ([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])

>>> example_dict["key2"]

массив ([10, 11, 12, 13, 14, 15,16, 17, 18, 19])

Я ожидал, что цикл получит доступ только к массиву в example_dict["key1"], но почему-то такая же операция применяется и к массиву, хранящемуся в example_dict["key2"].

1 Ответ

1 голос
/ 11 июня 2019
>>> hex(id(example_dict["key1"]))
'0x26a543ea990'
>>> hex(id(example_dict["key2"]))
'0x26a543ea990'

example_dict["key1"] и example_dict["key2"] указывают на один и тот же адрес.Чтобы это исправить, вы можете использовать диктет.

import numpy
keys = ["key1", "key2"]
example_dict = {key: numpy.array(range(10)) for key in keys}
...