首页 > 解决方案 > 如何使用整数索引和数组的组合作为多维数组的索引?

问题描述

x = np.array([[0, 1, 2, 3],
            [4, 5, 6, 7],
            [8, 9, 10, 11]])
x = np.array([np.array(x), np.array(x), np.array(x)])
arr = [[1, 1], [2, 2]]
print(x[:, arr])

我需要该数组的 (:, 1, 1) 和 (:, 2, 2)

那是:

[5, 5, 5]
[10, 10, 10]

但它返回 (:, 1) 和 (:, 2) 两次,我也尝试过使用元组。

编辑:使用 x[(slice(None), *zip(*arr))] 有效。但是如果我需要在 arr 的两个值之间使用 ':' 怎么办?像 x[arr[0], :, arr[1])

标签: pythonarraysnumpy

解决方案


你可以做的是获得这些元素

x[:,[1,2],[1,2]]

您可能无法直接编写它,因为它arr可以有任意数量的元素。在这种情况下,我们可以将结果解压缩到一个元组中:

x[(slice(None), *zip(*arr))]

这里zip(*arr)转置中的元素arr,然后我们将转置解包为元组中的额外元素。如果您在下标中写 a,这slice(None)基本上就是幕后发生的事情:


推荐阅读