python - Numpy - 用索引数组索引数组的最后一个维度
问题描述
我正在尝试使用由我希望保留的索引组成的矩阵来索引 3D 矩阵的最后一个维度。
我有一个形状的推力值矩阵:
(3, 3, 5)
我想根据一些标准过滤最后一个索引,使其从大小 5 减小到大小 1。我已经在最后一个维度中找到了符合我的标准的索引:
[[0 0 1]
[0 0 1]
[1 4 4]]
我想要实现的目标:对于第一行和第一列,我想要最后一个维度的第 0 个索引。对于第一行和第三列,我想要最后一个维度的第一个索引。在索引方面,保持最终矩阵将变成这样的(3, 3)
2D 矩阵:
[[0,0,0], [0,1,0], [0,2,1];
[1,0,0], [1,1,0], [1,2,1];
[2,0,1], [2,1,4], [2,2,4]]
我非常有信心 numpy 可以做到这一点,但我无法弄清楚究竟是如何做到的。我宁愿不构建带有嵌套 for 循环的构造。
我已经尝试过:
minValidPower = totalPower[:, :, tuple(indexMatrix)]
但这会产生一个(3, 3, 3, 3)
矩阵,所以我不完全确定我应该如何处理这个问题。
解决方案
作为a
输入数组和idx
索引之一 -
np.take_along_axis(a,idx[...,None],axis=-1)[...,0]
或者,使用开放式网格 -
I,J = np.ogrid[:idx.shape[0],:idx.shape[1]]
out = a[I,J,idx]
推荐阅读
- r - data.frame 尝试将变量名称分配为标签而不是变量内容?
- javascript - 如何使用 javascript 访问我的父 li 元素?
- html - 为 html 提供 css 路径,但它不起作用
- java - 我设备中的 Pdf 文件未在 WebView 中加载
- google-cloud-platform - 在 GCP 中,我需要保密哪些值
- python - 除了openpyxl之外,有没有更快的方法来编辑xlsm文件?
- c# - 将 RESTSharp POST 代码更改为 .NET HttpClient
- php - 如何使用父级创建排序 sql/php
- java - 使用 HashMap 的稀疏数组
- laravel - GuzzleHttp\Exception\InvalidArgumentException IDN 转换失败