2013-03-03 109 views
0

我有一个空的'numpy.ndarray'来更新。Python更新数组字典

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但最大值和最小值的更新值为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.]])} 

回答

1

正如我在评论最后一个问题的建议,你可能想使用

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

,而不是

for arg in parse: 
    grid_stat[arg] = my_grid 

套到非常相同阵列的grid_stat每个值,一个叫my_grid 。它不会生成三个具有相同形状和内容的单独数组。您可以通过使用idis证实了这一点:

>>> 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 

+0

由于DSM但对不起,我我以前不得到我的问题的建议。 – 2013-03-03 19:19:31

+1

@Gianni:不要使用'grid_stat [arg] = my_grid'。使用'grid_stat [arg] = my_grid.copy()'。 – DSM 2013-03-03 19:21:55

+0

它的工作原理,谢谢。对不起,如果我问.copy()和为什么它使用复制? (我需要提高自己的技能) – 2013-03-03 19:27:55