python - 在特定维度上选择 numpy 数组中的索引
问题描述
很难找到一个清晰的标题,但一个例子会清楚地说明它。例如,我的输入是:
c = np.full((4, 3, 2), 5)
c[:,:,1] *= 2
ix = np.random.randint(0, 2, (4, 3))
如果ix
是:
array([[1, 0, 1],
[0, 0, 1],
[0, 0, 1],
[1, 1, 0]])
如果想要结果:
array([[10, 5, 10],
[ 5, 5, 10],
[ 5, 5, 10],
[10, 10, 5]])
我的 c 数组可以是任意维度,也可以是我想要采样的维度。
这听起来像插值,但每次我想应用它时我都不愿意构造一个索引数组。有没有办法在 numpy 数组上使用某种索引来做到这一点?还是我必须使用一些插值方法...速度和内存是这里的一个问题,因为我必须这样做很多次,而且数组可能非常大。
感谢您的任何见解!
解决方案
使用创建 x、y 索引numpy.ogrid
,然后使用高级索引:
idx, idy = np.ogrid[:c.shape[0], :c.shape[1]]
c[idx, idy, ix]
#array([[10, 5, 10],
# [ 5, 5, 10],
# [ 5, 5, 10],
# [10, 10, 5]])
推荐阅读
- python - 如何使用 sympy 找到 x -y 的差异
- jenkins - 在詹金斯中设置一个全局变量
- mysql - MySQL在启动后立即中止
- java - list 的迭代器同时实现了 Kotlin.Collection.Iterator 和 Java.util.Iterator?
- azure - 为什么没有将应用程序权限添加到我的 MS Graph 令牌中?
- .net - 无法使用 Pop3Client c# 连接/读取 Outlook 365 邮件业务帐户,甚至更正凭据
- html - 我想在 Vue.js 中更改上传文件的 .name
- crystal-reports - 当有条件地抑制组时,Crystal Report 删除组排序
- android - Android MediatorLiveData 值更改被调用 2 次
- ios - 从保存的 indexPath 中选择单元格