python - 如何使用整数索引和数组的组合作为多维数组的索引?
问题描述
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])
解决方案
你可以做的是获得这些元素
x[:,[1,2],[1,2]]
您可能无法直接编写它,因为它arr
可以有任意数量的元素。在这种情况下,我们可以将结果解压缩到一个元组中:
x[(slice(None), *zip(*arr))]
这里zip(*arr)
将转置中的元素arr
,然后我们将转置解包为元组中的额外元素。如果您在下标中写 a,这slice(None)
基本上就是幕后发生的事情:
。
推荐阅读
- r - 有人可以向我解释为什么这个平等测试不起作用吗?
- angular - Angular Sanctum 基于会话的跨域 CSRF Cookie
- html - 使用 Visual Studio Code 在经典 ASP 中测试 HTML
- apache-kafka-streams - KStream - KTable join:使用 Ktable 数据丰富流
- jquery - bootstrap 和 jquery 甚至都不会加载 CDN 链接
- javascript - BIRT 图表:如何隐藏标签之间的 X 轴刻度?
- animation - 滚动后的Highcharts动画不起作用
- elasticsearch - ElasticSearch 查询嵌套路径过滤器或
- android - 如何防止android和iphone上的移动网站自动锁屏
- c++ - STL中的算法扫描2个范围并调用函数