如果我们有一个像numpy数组:
Array = np.zeros((2, 10, 10))
我们想要设置一个元素,由另一个元素给出
indexes = np.array([0,0,0])
我们怎么做?
Array[indexes] = 5
将Array的FIRST维度的每个元素设置为5
使用a
数据数组和idx
索引数组,使每行对应于要在数据数组中设置的一个元素,您可以 -
a[tuple(idx.T)] = 5
样品运行 -
In [94]: a = np.zeros((2,2,3),dtype=int) In [95]: idx = np.array([[0,0,0],[1,1,0],[0,1,2]]) In [96]: a[tuple(idx.T)] = 5 In [97]: a Out[97]: array([[[5, 0, 0], [0, 0, 5]], [[0, 0, 0], [5, 0, 0]]]) In [98]: a[tuple(idx.T)] = [5,10,15] # or set different values In [99]: a Out[99]: array([[[ 5, 0, 0], [ 0, 0, 15]], [[ 0, 0, 0], [10, 0, 0]]])
或者,我们可以计算线性指数,np.ravel_multi_index
然后执行赋值np.put
,就像这样 -
np.put(a,np.ravel_multi_index(idx.T,a.shape),5)
如果你正在处理三维数组,我们可以切割三维索引并指定另一种方法,如下所示 -
a[idx[:,0],idx[:,1],idx[:,2]] = 5
如果它只需要设置一个元素,那就做 -
a[tuple(idx)] = 5
样品运行 -
In [118]: a = np.zeros((2,2,3),dtype=int) In [119]: idx = np.array([0,0,0]) In [120]: a[tuple(idx)] = 5 In [121]: a Out[121]: array([[[5, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0]]])