用2d索引的2dArray索引3dArray,其中索引与最后2个维度匹配,并且标识了第一个轴

时间:2019-02-12 20:08:58

标签: numpy-ndarray numpy-broadcasting numpy-slicing numpy-indexing

一个例子应该是解释问题的最简单方法:

a = np.array([[1, 2, 3], [4, 5, 6]])
g = np.array([[0, 0], [1, 1]])

在这里,我们可以使用以下方法提取“图片” a中的点(0,0)和(1,1):

print(a[g[:,0],g[:,1]])

现在,我想添加一个额外的尺寸(可以理解为图片序列)。 相应地,G现在是一个数组列表序列:

A = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
G = np.array([[[0, 0], [1, 1]], [[1, 0], [0, 1]]])

我现在想编写不带for循环的这段代码:

print([a[g[:,0],g[:,1]] for a, g in zip(A, G)])

应该与之前完全相同,只是两次分别在A和G中的第一个和第二个条目出现。 到目前为止,我最接近的是:

print(A[:,G[:,:,0],G[:,:,1]])

哪个输出:

[[[ 1  5]
[ 4  2]]

[[ 7 11]
[10  8]]]

而不是预期的:

[[ 1  5]
[10  8]]

问题是当前使用标记轴的组合

print(A[:,g[:,:,0],g[:,:,1]])
        ^   ^        ^

相反,必须以某种方式“标识”带有箭头的轴心市场。 (像zip对齐两个轴,并且笛卡尔积采用所有组合)

标题实际上不是很好,所以如果有人可以建议一个bette rone :)会很好。 谢谢

0 个答案:

没有答案