我想重新组织这个数组
values = np.array([[-0.00127687, -0.0384767 , -0.99925868],
[-0.16354917, 0.075218 , 0.98366352],
[-0.64543092, 0.75546703, -0.11264323],
[ nan, nan, nan],
[ nan, nan, nan],
[ nan, nan, nan]])
按照这个数组描述的顺序
order = np.array([ 5., 4., 0., nan, nan, nan])
中的每个值 order
数组代表相应数据应该移动到的位置。你知道有什么优雅的解决方案吗,如何重新排列?
我知道如何写一个 for
循环,但性能是我的首要目标,因为这个函数在每次程序执行中可能被调用几千次。
EDIT:
澄清一下 -- 预期的输出是这样的。
output = np.array([[-0.64543092, 0.75546703, -0.11264323],
[ nan, nan, nan],
[ nan, nan, nan],
[ nan, nan, nan],
[-0.16354917, 0.075218 , 0.98366352],
[-0.00127687, -0.0384767 , -0.99925868]])
解决这个问题的方法是将一个数组中的 nan
的位置复制到新的数组中,然后只在新数组中的值在 order
数组是有效的,而不是 nan
.
result = np.empty_like(values)
result[:] = np.nan
valid_indices = ~np.isnan(order)
result[order[valid_indices].astype(int)] = values[valid_indices]