gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:49 25 4
gpt4 key购买 nike

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

我有一本包含 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com