我有两个二维numpy数组:
import numpy as np
import scipy.stats.rankdata
arr_data = np.array( [[0.3, 0.1, 0.7, 0.5], [0.1, 0.5, 0.4, 0.07]] )
weights = np.array( [[0.05, 0.1, 0.35, 0.5], [0.2, 0.4, 0.1, 0.3]] )
我需要根据一个共同的排序对它们进行排序,共同的排序是从axis=1沿着第一个数组中的值生成的:
ranks = scipy.stats.rankdata(arr_data, axis=1).astype(int)
print('data', arr_data)
print('ranks',ranks)
获得的排名如下:
[[2 1 4 3]
[2 4 3 1]]
我被如何获得下面的排序数组所困扰:
for arr_data: [[0.1, 0.3, 0.5, 0.7], [0.07, 0.1, 0.4, 0.5]]
for weights: [[0.1, 0.05, 0.5, 0.35], [0.3, 0.2, 0.1, 0.4]]
也就是说,我的权重是基于数据数组排序的。最终,我想把数据乘以它们对应的权重,保持数据数组中排序值的顺序。在我的项目中,我有非常大的数据集,所以我想避免Python列表和循环。
1条答案
按热度按时间kmbjn2e31#
原来有一个优雅的解决方案: