Python更新数组字典

Python更新数组字典,python,arrays,optimization,dictionary,Python,Arrays,Optimization,Dictionary,我有一个空的'numpy.ndarray'要更新 import numpy as np my_grid = np.zeros((5, 5)) # stat parse = "max","min","avg" # create a dictionary for each element of parse grid_stat = {} for arg in parse: grid_stat[arg] = my_grid grid_stat {'avg': array([[

我有一个空的'numpy.ndarray'要更新

import numpy as np
my_grid =  np.zeros((5, 5))

# stat 
parse = "max","min","avg"

# create a dictionary for each element of parse 
grid_stat = {}
for arg in parse:
    grid_stat[arg] = my_grid


 grid_stat 
{'avg': array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]]),
 'max': array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]]),
 'min': array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])}
我希望用新值更新字典中的每个网格(它将是循环的一部分) 例如:dy=0、dx=0、最大值=100、最小值=50、平均值=75时的

grid_stat 
    {'avg': array([[ 75.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.]]),
     'max': array([[ 100.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.]]),
     'min': array([[ 50.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.]])}
我尝试了一个简单的解决办法

grid_stat['avg'][0,0]=100
但对于最大值和最小值,更新的值为100

grid_stat
{'avg': array([[ 100.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.]]),
 'max': array([[ 100.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.]]),
 'min': array([[ 100.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.],
       [   0.,    0.,    0.,    0.,    0.]])}

正如我在对最后一个问题的评论中所建议的,您可能想要使用

for arg in parse:
    grid_stat[arg] = my_grid.copy()
而不是

for arg in parse:
    grid_stat[arg] = my_grid
grid\u stat
的每个值设置为非常相同的数组,该数组名为
my\u grid
。它不会生成具有相同形状和内容的三个单独数组。您可以使用
id
is
来确认这一点:

>>> id(my_grid)
4325774752
>>> id(grid_stat['max'])
4325774752
>>> id(grid_stat['avg'])
4325774752
>>> id(grid_stat['min'])
4325774752
>>> my_grid is grid_stat['max']
True
>>> grid_stat['max'] is grid_stat['avg']
True

等等。

谢谢DSM,但很抱歉,我没有得到解决我问题的建议。@Gianni:不要使用
grid\u stat[arg]=my\u grid
。使用
grid\u stat[arg]=my\u grid.copy()
。它可以工作,谢谢。抱歉,如果我问有关.copy()的问题,以及为什么它使用copy工作?(我需要提高我的技能)这在numpy教程的第1部分中讨论。