首页 > 解决方案 > 使用评估函数对 np.array x 进行排序

问题描述

我有这个 2D numpy 数组,它看起来像这样:

[[ 7.13617384e+00  3.93455820e+00  8.34862014e+00  1.42756162e+03]
 [ 2.93579791e+00  4.83915611e+00 -3.41362211e-01  1.71145016e+03]
...
 [ 9.58016886e+00  2.96627154e+00 -1.43432831e+00  2.44785312e+03]
 [-1.32142476e+00  9.51850265e+00  1.77833164e+01  1.66931544e+03]]

有一个评估函数,它采用每个数组的 4 个值并给它一个值,越低越好。现在我想根据评估函数生成的最低值对原始数组进行排序。代码看起来像这样:

x = np.random.uniform(low=bounds_min, high=bounds_max, size=(pop_size, 4))
f = ea.evaluate(x)
sorted_f = np.sort(f)

np.argsort(x, order(sorted_f)

标签: pythonarraysnumpysorting

解决方案


您可以使用 argsort 来获取值的顺序,f然后使用这些索引对原始数组进行排序x

x = np.random.uniform(low=bounds_min, high=bounds_max, size=(pop_size, 4))
f = ea.evaluate(x)

idx = np.argsort(f)
f = f[idx] # assuming f is an array
x = x[idx]

推荐阅读