0

我有一个空的“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.]])}

我希望用新值更新字典中的每个网格(它将成为循环的一部分)例如:on dy = 0, dx = 0, max= 100, min= 50, avg = 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但对于 max 和 min 更新的值也是 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.]])}
4

1 回答 1

1

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

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

代替

for arg in parse:
    grid_stat[arg] = my_grid

将 的每个值设置grid_stat相同的数组,称为my_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

等等

于 2013-03-03T19:17:42.580 回答