按指数数组对numpy数据进行排序(数据和指数都可能包含`np.nan`!)。

问题描述 投票:0回答:1

我想重新组织这个数组

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]])
python arrays performance numpy nan
1个回答
0
投票

解决这个问题的方法是将一个数组中的 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]
© www.soinside.com 2019 - 2024. All rights reserved.