Python 如何在numpy数组的字典中只更改一个值
我被一个我认为微不足道的问题所困扰 我有一本有两个词条的字典。每个条目是另一个具有2个条目(选项)的词典。每个选项都是一个numpy数组 在第一步中,我将创建这些阵列,以便每个模拟的形状相同。在下一步中,我只想更改一个值(在示例中:Python 如何在numpy数组的字典中只更改一个值,python,python-3.x,numpy,dictionary,numpy-ndarray,Python,Python 3.x,Numpy,Dictionary,Numpy Ndarray,我被一个我认为微不足道的问题所困扰 我有一本有两个词条的字典。每个条目是另一个具有2个条目(选项)的词典。每个选项都是一个numpy数组 在第一步中,我将创建这些阵列,以便每个模拟的形状相同。在下一步中,我只想更改一个值(在示例中:sim1,选项1,数组元素[0,0]) 但由于某些原因,选项_1-阵列在每次模拟中都会更改,而不仅仅是在模拟1中 # 1st output {'Sim 1': {'Option_1': array([[0., 0.], [0., 0.]]),
sim1
,选项1
,数组元素[0,0]
)
但由于某些原因,选项_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.]])}}
你可以用这个。这是因为您正在为每个模拟分配zero_trips
,而不是zero_trips
的值。如果编辑其中一个,所有的zero\u行程
值都将更改
代码:
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.]])}}
输出:
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.]])}}
你可以用这个。这是因为您正在为每个模拟分配zero_trips
,而不是zero_trips
的值。如果编辑其中一个,所有的zero\u行程
值都将更改
代码:
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.]])}}
输出:
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.]])}}
你知道为什么这不起作用吗<模拟中sim卡的代码>因为
zero\u trips
包含np.zero((2,2))
,所以即使我们使用copy
,对zero\u trips
列表中数组的引用也保持不变。这可以通过使用deepcopy
来解决,它也会在zero\u trips
中创建元素的副本。您知道这为什么不起作用吗<模拟中sim卡的代码>因为zero\u trips
包含np.zero((2,2))
,所以即使我们使用copy
,对zero\u trips
列表中数组的引用也保持不变。这可以通过使用deepcopy
来解决,它也会在zero\u trips
中创建元素的副本。