You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NumPy中获取源数组元素在目标数组中的索引?

解决方法与专业名称说明

嘿,我来帮你搞定这个问题,顺便告诉你对应的专业术语,方便你之后搜索学习~

一、实现代码

直接上可运行的代码,每一步都给你写了注释,一看就懂:

import numpy as np

# 定义你给出的两个数组
src = np.array([[8, 1], [2, 4]])
dst = np.array([[1, 4], [8, 2]])

# 先把两个数组展平,这样方便逐个匹配元素
flat_dst = dst.flatten()
flat_src = src.flatten()

# 遍历src里的每个元素,找到它在dst展平后的数组里的位置
flat_indices = np.array([np.where(flat_dst == val)[0][0] for val in flat_src])

# 把展平的索引转换成二维的行、列索引
# 原理很简单:二维数组展平后的索引 = 行索引 * 列数 + 列索引,反过来算就行
rows = flat_indices // dst.shape[1]
cols = flat_indices % dst.shape[1]

# 最后把行、列索引重塑成和src一样的形状,组合成你需要的元组
indices = (rows.reshape(src.shape), cols.reshape(src.shape))

# 验证一下结果对不对
print("生成的索引元组:")
print(indices)
print("\ndst[indices]的结果:")
print(dst[indices])  # 输出和src完全一致,完美!

二、操作的专业名称

这类操作的专业名称是反向索引映射(Inverse Index Mapping),它属于NumPy里**高级索引(Advanced Indexing)**的范畴。简单说就是:你已经知道目标数组(这里是dst),以及想要从它里面提取出的源数组(这里是src),反过来找对应的索引映射关系。如果你的场景里数组有重复元素,可能需要额外处理匹配优先级,但你的例子里元素都是唯一的,上面的代码完全够用。

内容的提问来源于stack exchange,提问作者LoneCodeRanger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:23:13