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ただし、最大値と最小値の更新値は 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。同じ形状と内容の 3 つの別個の配列は作成されません。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 に答える