scikit-opt icon indicating copy to clipboard operation
scikit-opt copied to clipboard

np.argsort(np.argsort(-self.Y))

Open yjxaigithub opened this issue 4 years ago • 1 comments

https://github.com/guofei9987/scikit-opt/blob/b1f147af996f9839b7c107c17a8dd8c7098cdef0/sko/operators/ranking.py#L19, 请问这行代码是不是有点问题: “np.argsort(np.argsort(-self.Y))”? np.argsort()已经是对最后一维排序了,为什么需要再次np.argsort,感觉多余,是不是应该修改成 np.argsort(-self.Y)

还有一个小的建议,如 https://github.com/guofei9987/scikit-opt/blob/b1f147af996f9839b7c107c17a8dd8c7098cdef0/sko/operators/crossover.py#L7 既然“Chrom, size_pop, len_chrom = self.Chrom, self.size_pop, self.len_chrom”,后面的代码再使用"self.Chrom”, “self.size_pop”, “self.len_chrom“时建议统一改成"Chrom”, “size_pop”, “len_chrom“,而代码中有时使用带self的变量,有时使用不带self的变量,感觉有点怪怪的

yjxaigithub avatar Aug 17 '21 15:08 yjxaigithub

https://github.com/guofei9987/scikit-opt/blob/b1f147af996f9839b7c107c17a8dd8c7098cdef0/sko/operators/ranking.py#L19

, 请问这行代码是不是有点问题: “np.argsort(np.argsort(-self.Y))”? np.argsort()已经是对最后一维排序了,为什么需要再次np.argsort,感觉多余,是不是应该修改成 np.argsort(-self.Y) 还有一个小的建议,如

https://github.com/guofei9987/scikit-opt/blob/b1f147af996f9839b7c107c17a8dd8c7098cdef0/sko/operators/crossover.py#L7

既然“Chrom, size_pop, len_chrom = self.Chrom, self.size_pop, self.len_chrom”,后面的代码再使用"self.Chrom”, “self.size_pop”, “self.len_chrom“时建议统一改成"Chrom”, “size_pop”, “len_chrom“,而代码中有时使用带self的变量,有时使用不带self的变量,感觉有点怪怪的

两个 np.argsort 不多余。
一个np.argsort 指的是:如果想让原序列按照大小排序,第i位应当是原序列的第几位。
两个np.argsort 指的是:第i位在整理中的 rank 是几。这也是我们需要的结果。

套两个 np.argsort 可能不易理解,但是性能最高的方案。

可以试试这两个结果不一样

np.argsort([8,5,6,7])
np.argsort(np.argsort([8,5,6,7]))

每个算子第一行都有这个 Chrom, size_pop, len_chrom = self.Chrom, self.size_pop, self.len_chrom,这是为了提醒用户,如果想魔改的话,可以读写 self 的这些字段。

guofei9987 avatar Sep 27 '21 12:09 guofei9987