Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在numpy数组的字典中只更改一个值_Python_Python 3.x_Numpy_Dictionary_Numpy Ndarray - Fatal编程技术网

Python 如何在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.]]),

我被一个我认为微不足道的问题所困扰

我有一本有两个词条的字典。每个条目是另一个具有2个条目(选项)的词典。每个选项都是一个numpy数组

在第一步中,我将创建这些阵列,以便每个模拟的形状相同。在下一步中,我只想更改一个值(在示例中:
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
中创建元素的副本。