python - 如何仅更改 numpy 数组字典中的一个值

标签 python python-3.x numpy dictionary numpy-ndarray

我遇到了一个我认为微不足道的问题。

我有一本包含 2 个条目的字典(模拟)。每个条目都是另一个包含 2 个条目(选项)的字典。每个选项都是一个 numpy 数组。

在第一步中,我创建了这些数组,以便它们在每次模拟中的形状都相同。在下一步中,我只想更改一个值(在示例中:Sim 1Option_1、数组元素 [0,0] ).

simulations = {"Sim 1" : "Sim a",
               "Sim 2" : "Sim b"}

zero_trips = {"Option_1" : np.zeros((2, 2)),
              "Option_2" : np.zeros((2, 2))}

sim_trips = {}
for sim in simulations:
    sim_trips[sim] = zero_trips

print(sim_trips)
sim_trips["Sim 1"]["Option_1"][0,0] += 1
print(sim_trips)

但由于某些原因,Option_1 数组在每次模拟中都会发生变化,而不仅仅是模拟 1。

# 1st output
    {'Sim 1': {'Option_1': array([[0., 0.], [0., 0.]]), 
               'Option_2': array([[0., 0.], [0., 0.]])}, 
     'Sim 2': {'Option_1': array([[0., 0.], [0., 0.]]), 
               'Option_2': array([[0., 0.], [0., 0.]])}}

# 2nd output
    {'Sim 1': {'Option_1': array([[1., 0.], [0., 0.]]), 
               'Option_2': array([[0., 0.], [0., 0.]])}, 
     'Sim 2': {'Option_1': array([[1., 0.], [0., 0.]]), 
               'Option_2': array([[0., 0.], [0., 0.]])}}

我做错了什么?有人可以帮忙吗?

我想要的输出是这样的:

        {'Sim 1': {'Option_1': array([[1., 0.], [0., 0.]]), 
                   'Option_2': array([[0., 0.], [0., 0.]])}, 
         'Sim 2': {'Option_1': array([[0., 0.], [0., 0.]]), 
                   'Option_2': array([[0., 0.], [0., 0.]])}}

最佳答案

您可以使用 deepcopy为了这。这是因为您要为每个模拟分配 zero_trips,而不是 zero_trips 的值。如果您编辑其中一个,所有的 zero_trips 值都会改变。

代码:

from copy import deepcopy

simulations = {"Sim 1" : "Sim a",
               "Sim 2" : "Sim b"}

zero_trips = {"Option_1" : np.zeros((2, 2)),
              "Option_2" : np.zeros((2, 2))}

sim_trips = {}
for sim in simulations:
    sim_trips[sim] = deepcopy(zero_trips)

print(sim_trips)
sim_trips["Sim 1"]["Option_1"][0,0] += 1
print(sim_trips)

输出:

{'Sim 1': {'Option_1': array([[0., 0.], [0., 0.]]), 
           'Option_2': array([[0., 0.], [0., 0.]])}, 
 'Sim 2': {'Option_1': array([[0., 0.], [0., 0.]]),
           'Option_2': array([[0., 0.], [0., 0.]])}}

{'Sim 1': {'Option_1': array([[1., 0.], [0., 0.]]),
           'Option_2': array([[0., 0.], [0., 0.]])}, 
 'Sim 2': {'Option_1': array([[0., 0.], [0., 0.]]),
           'Option_2': array([[0., 0.], [0., 0.]])}}

关于python - 如何仅更改 numpy 数组字典中的一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59249842/

相关文章:

c++ - boost python 对象的生命周期

python - 使用 Python 将日期和时间字符串组合到单个日期时间对象的最简单方法

python - 在ubuntu中安装ujson的问题

python - 如何更改 Raspberry Pi 中的默认 Python 版本

python - Pandas:按行从 DataFrame 的特定列中选择值

python - 从 Python 中的时区感知日期时间对象获取 UTC 时间戳

python - 在 python 解释器 -c 命令中使用条件

python - Flask:对单个 URL 使用 [GET, POST] 函数

numpy - 为什么SVM中支持向量的数量没有变化?

python - 升级 Python 模块的最佳实践