如何用索引数组与候选数组构造新数组?Julia中np.choose的等效方法
Julia 中类似 NumPy
np.choose 的等效实现 一维场景的最简实现
在 Julia 中,直接利用数组的向量化索引就能实现和 np.choose 完全一致的效果,无需手动遍历索引数组,这也是性能最优的方式:
idx_arr = [1, 2, 3, 2, 4] choices = [0, 10, 20, 30] new_arr = choices[idx_arr] # 结果: [0, 10, 20, 10, 30]
这里的索引操作是 Julia 原生支持的向量化操作,底层会以高效的方式执行,性能远优于手动列表推导式循环。
多维/多候选数组场景的扩展实现
如果你的需求和 np.choose 的高级用法一致(比如候选是多个同维度数组,需要按索引选择对应位置的元素),可以通过数组堆叠结合索引来实现:
假设我们有两个候选数组,需要根据索引数组选择对应位置的元素:
# 模拟 np.choose 的多候选场景:选择第1或第2个数组的对应元素 idx_arr = [1, 2, 1, 2, 1] choice1 = [0, 1, 2, 3, 4] choice2 = [10, 11, 12, 13, 14] # 将候选数组合并为二维数组,再按索引选择列 combined = hcat(choice1, choice2) new_arr = combined[CartesianIndices(choice1), idx_arr] # 结果: [0, 11, 2, 13, 4]
或者更简洁的写法,利用 stack 函数:
combined = stack([choice1, choice2], dims=2) new_arr = combined[:, idx_arr] # 结果同上
总结
- 一维场景下,直接使用
choices[idx_arr]就是最简洁高效的替代方案,完全等价于np.choose的基础用法。 - 复杂多候选场景,通过堆叠候选数组再进行向量化索引,就能实现和
np.choose一致的功能。
内容的提问来源于stack exchange,提问作者rosa b.
相关产品推荐
相关产品推荐

