NumPy中数组索引的逆操作:从置换数组恢复原数组
恢复NumPy原数组的直接方法
已知经过ar_permuted = ar[indices]得到的ar_permuted和索引数组indices,最直接的恢复原数组ar的方式是构建indices的逆排列数组,再用这个逆数组索引ar_permuted。
具体实现代码
import numpy as np # 已知的输入 ar_permuted = np.array([0, 1, 5, 3, 4, 2, -1, -1]) indices = np.array([5, 6, 1, 2, 0, 7, 3, 4]) # 构建逆索引数组:inv_indices[indices[i]] = i inv_indices = np.empty_like(indices) inv_indices[indices] = np.arange(len(indices)) # 恢复原数组 ar = ar_permuted[inv_indices] print(ar) # 输出: array([4, 5, 3, -1, -1, 0, 1, 2])
原理说明
原操作中,ar_permuted[i] = ar[indices[i]],意味着原数组ar的第indices[i]个元素对应ar_permuted的第i个元素。要恢复ar,我们需要找到每个原位置j对应的ar_permuted中的位置i——也就是满足indices[i] = j的i,这正是逆索引数组inv_indices的作用:inv_indices[j] = i。用这个逆数组索引ar_permuted,就能还原出原数组的每个位置元素。
内容的提问来源于stack exchange,提问作者Ars ML
相关产品推荐
相关产品推荐

