我需要从多维数组中提取某些不是后续数据的值。
import numpy as np
A = np.array([[[ 0., 4., 0. ],
[ 0.19230769, 4.03846154, 0. ],
[-0.4, 4.8, 0. ],
[ 2., 1., 0. ]],
[[ 1.2, 3.4, 0. ],
[ 2.11538462, 4.42307692, 0. ],
[ 0., 4., 0. ],
[ 3.6, 1.8, 0. ]],
[[ 1.8, 3.1, 0. ],
[ 3.17307692, 4.63461538, 0. ],
[ 0., 4., 0. ],
[ 4., 2., 0. ]]])
对于每个4x3块,我想提取任意行
例如以下元素:
A[0,2,:]
A[1,1,:]
A[2,1,:]
基本上是行B = [2,1,1]
,它会给我:
[-0.4 4.8 0. ]
[ 2.11538462 4.42307692 0. ]
[ 3.17307692 4.63461538 0. ]
如何有效地做到这一点?
答案 0 :(得分:2)
您可以使用"advanced indexing":
In [99]: A[[0,1,2], [2,1,1], :]
Out[99]:
array([[-0.4 , 4.8 , 0. ],
[ 2.11538462, 4.42307692, 0. ],
[ 3.17307692, 4.63461538, 0. ]])
这里的索引数组是
ind1 = [0, 1, 2]
ind2 = [2, 1, 1]
并且ind1
正在索引A
的第一个轴,而ind2
正在索引第二个轴,第三个轴正在完全切片(使用:
),结果数组result
具有与ind1
和ind2
相同的形状 - 即(3,)
- 加上完全切片轴的形状,也是{{ 1}}。因此,(3,)
是result.shape
和
(3, 3)
代表result[i, j] = A[ind1[i], ind2[i], j]
和i = 0,1,2
。