如果我们有一个numpy的阵列,如:如何使用另一个Numpy数组设置多维Numpy数组的单个元素?
Array = np.zeros((2, 10, 10))
,我们要设置另一个
indexes = np.array([0,0,0])
我们如何能做到这一点给它的一个元素,?
Array[indexes] = 5
被阵列的第一维度的每一个元素设置为5
如果我们有一个numpy的阵列,如:如何使用另一个Numpy数组设置多维Numpy数组的单个元素?
Array = np.zeros((2, 10, 10))
,我们要设置另一个
indexes = np.array([0,0,0])
我们如何能做到这一点给它的一个元素,?
Array[indexes] = 5
被阵列的第一维度的每一个元素设置为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]]])
由于这非常有帮助!在完成您的示例并应用它之后,我只是忘记发表评论,这需要花费几天时间。无论如何谢谢你! – Fosa
也可以使用一个列表(而不是作为numpy.array):'阵列[0,0,0] = 5'只设置第一零至5 – Lucas