如何在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
相关产品推荐
相关产品推荐

