一个例子应该是解释问题的最简单方法:
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 :)会很好。 谢谢