2013-03-03 79 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