如何在python中使用循环为ndarray变量赋值

如何在python中使用循环为ndarray变量赋值,python,python-2.7,numpy,multidimensional-array,Python,Python 2.7,Numpy,Multidimensional Array,定义了一个数据类型为对象的数据数组a,并用字典填充它 这是a array([[[{'position': (0, 0, 0)}, {'position': (0, 0, 0)}, {'position': (0, 0, 0)}, {'position': (0, 0, 0)}], [{'position': (0, 0, 0)}, {'position': (0, 0, 0)}, {'position': (0, 0, 0)}, {'position': (0, 0,

定义了一个数据类型为对象的数据数组
a
,并用字典填充它

这是
a

array([[[{'position': (0, 0, 0)}, {'position': (0, 0, 0)},
     {'position': (0, 0, 0)}, {'position': (0, 0, 0)}],
    [{'position': (0, 0, 0)}, {'position': (0, 0, 0)},
     {'position': (0, 0, 0)}, {'position': (0, 0, 0)}],
    [{'position': (0, 0, 0)}, {'position': (0, 0, 0)},
     {'position': (0, 0, 0)}, {'position': (0, 0, 0)}]],

   [[{'position': (0, 0, 0)}, {'position': (0, 0, 0)},
     {'position': (0, 0, 0)}, {'position': (0, 0, 0)}],
    [{'position': (0, 0, 0)}, {'position': (0, 0, 0)},
     {'position': (0, 0, 0)}, {'position': (0, 0, 0)}],
    [{'position': (0, 0, 0)}, {'position': (0, 0, 0)},
     {'position': (0, 0, 0)}, {'position': (0, 0, 0)}]]], dtype=object)
我想将字典中的每个元组替换为一个元组(X-index,Y-index,Z-index)。我尝试
numpy.ndenumerate
循环赋值,如下代码所示

for (x_index, y_index, z_index), temp in np.ndenumerate(a):
    a[x_index][y_index][z_index]['position'] = (x_index, y_index, z_index)
每个元组被分配到最新的值(1,2,3)
a
的值为

array([[[{'position': (1, 2, 3)}, {'position': (1, 2, 3)},
     {'position': (1, 2, 3)}, {'position': (1, 2, 3)}],
    [{'position': (1, 2, 3)}, {'position': (1, 2, 3)},
     {'position': (1, 2, 3)}, {'position': (1, 2, 3)}],
    [{'position': (1, 2, 3)}, {'position': (1, 2, 3)},
     {'position': (1, 2, 3)}, {'position': (1, 2, 3)}]],

   [[{'position': (1, 2, 3)}, {'position': (1, 2, 3)},
     {'position': (1, 2, 3)}, {'position': (1, 2, 3)}],
    [{'position': (1, 2, 3)}, {'position': (1, 2, 3)},
     {'position': (1, 2, 3)}, {'position': (1, 2, 3)}],
    [{'position': (1, 2, 3)}, {'position': (1, 2, 3)},
     {'position': (1, 2, 3)}, {'position': (1, 2, 3)}]]], dtype=object)
如何获得所需的输出

array([[[{'position': (0, 0, 0)}, {'position': (0, 0, 1)},
     {'position': (0, 0, 2)}, {'position': (0, 0, 3)}],
    [{'position': (0, 1, 0)}, {'position': (0, 1, 1)},
     {'position': (0, 1, 2)}, {'position': (0, 1, 3)}],
    [{'position': (0, 2, 0)}, {'position': (0, 2, 1)},
     {'position': (0, 2, 2)}, {'position': (0, 2, 3)}]],

   [[{'position': (1, 0, 0)}, {'position': (1, 0, 1)},
     {'position': (1, 0, 2)}, {'position': (1, 0, 3)}],
    [{'position': (1, 1, 0)}, {'position': (1, 1, 1)},
     {'position': (1, 1, 2)}, {'position': (1, 1, 3)}],
    [{'position': (1, 2, 0)}, {'position': (1, 2, 1)},
     {'position': (1, 2, 2)}, {'position': (1, 2, 3)}]]], dtype=object)

这是一个参照复制问题。您更新一个字典,每隔一个字典将使用相同的值更新一次。这就是为什么每个值都是
{'position':(1,2,3)}
,因为它是最后一次更新。要解决此问题,请每次创建新词典

>>> a = np.ndarray(shape=(2,3,4), dtype=object)
>>> for (x_index, y_index, z_index), temp in np.ndenumerate(a):
...     a[x_index][y_index][z_index] = {'position':(x_index, y_index, z_index)}
... 
>>> a
array([[[{'position': (0, 0, 0)}, {'position': (0, 0, 1)},
         {'position': (0, 0, 2)}, {'position': (0, 0, 3)}],
        [{'position': (0, 1, 0)}, {'position': (0, 1, 1)},
         {'position': (0, 1, 2)}, {'position': (0, 1, 3)}],
        [{'position': (0, 2, 0)}, {'position': (0, 2, 1)},
         {'position': (0, 2, 2)}, {'position': (0, 2, 3)}]],

       [[{'position': (1, 0, 0)}, {'position': (1, 0, 1)},
         {'position': (1, 0, 2)}, {'position': (1, 0, 3)}],
        [{'position': (1, 1, 0)}, {'position': (1, 1, 1)},
         {'position': (1, 1, 2)}, {'position': (1, 1, 3)}],
        [{'position': (1, 2, 0)}, {'position': (1, 2, 1)},
         {'position': (1, 2, 2)}, {'position': (1, 2, 3)}]]], dtype=object)
>>> a = np.ndarray(shape=(2,3,4), dtype=object)
>>> for (x_index, y_index, z_index), temp in np.ndenumerate(a):
...     a[x_index][y_index][z_index] = {'position':(x_index, y_index, z_index)}
... 
>>> a
array([[[{'position': (0, 0, 0)}, {'position': (0, 0, 1)},
         {'position': (0, 0, 2)}, {'position': (0, 0, 3)}],
        [{'position': (0, 1, 0)}, {'position': (0, 1, 1)},
         {'position': (0, 1, 2)}, {'position': (0, 1, 3)}],
        [{'position': (0, 2, 0)}, {'position': (0, 2, 1)},
         {'position': (0, 2, 2)}, {'position': (0, 2, 3)}]],

       [[{'position': (1, 0, 0)}, {'position': (1, 0, 1)},
         {'position': (1, 0, 2)}, {'position': (1, 0, 3)}],
        [{'position': (1, 1, 0)}, {'position': (1, 1, 1)},
         {'position': (1, 1, 2)}, {'position': (1, 1, 3)}],
        [{'position': (1, 2, 0)}, {'position': (1, 2, 1)},
         {'position': (1, 2, 2)}, {'position': (1, 2, 3)}]]], dtype=object)