<分区>
我想在数组或数组列表或 Java 中的其他数据结构上使用 argsort
函数,但我在文档中没有找到 argsort
函数。我知道 Collections
类上有一个 sort
方法,但没有任何 argsort
方法。是否有已实现 argsort
方法的类?
<分区>
我想在数组或数组列表或 Java 中的其他数据结构上使用 argsort
函数,但我在文档中没有找到 argsort
函数。我知道 Collections
类上有一个 sort
方法,但没有任何 argsort
方法。是否有已实现 argsort
方法的类?
最佳答案
我找到了这个类,我希望它是你想要的:
import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;
public final class ArrayUtils {
public static int[] argsort(final float[] a) {
return argsort(a, true);
}
public static int[] argsort(final float[] a, final boolean ascending) {
Integer[] indexes = new Integer[a.length];
for (int i = 0; i < indexes.length; i++) {
indexes[i] = i;
}
Arrays.sort(indexes, new Comparator<Integer>() {
@Override
public int compare(final Integer i1, final Integer i2) {
return (ascending ? 1 : -1) * Float.compare(a[i1], a[i2]);
}
});
return asArray(indexes);
}
public static <T extends Number> int[] asArray(final T... a) {
int[] b = new int[a.length];
for (int i = 0; i < b.length; i++) {
b[i] = a[i].intValue();
}
return b;
}
public static double[] castOf(final float[] x) {
double[] y = new double[x.length];
for (int i = 0; i < y.length; i++) {
y[i] = x[i];
}
return y;
}
public static int[] castOf(final long[] original) {
return castOf(original, original.length);
}
public static int[] castOf(final long[] original, final int newLength) {
int[] cast = new int[newLength];
int length = Math.min(cast.length, original.length);
for (int i = 0; i < length; i++) {
long o = original[i];
if (o < Integer.MIN_VALUE || o > Integer.MAX_VALUE) {
throw new IllegalArgumentException();
}
cast[i] = (int) o;
}
return cast;
}
public static float[][] copyOf(final float[][] x, final int newLength) {
float[][] y = new float[newLength][];
for (int i = 0; i < y.length; i++) {
if (x[i] != null) {
y[i] = Arrays.copyOf(x[i], x[i].length);
}
}
return y;
}
/**
* Assigns a random value to each element of the specified array of doubles.
*/
public static void fillRandom(final double[] x, final Random rng) {
for (int i = 0; i < x.length; i++) {
x[i] = rng.nextDouble();
}
}
private ArrayUtils() {
}
}
链接: Code
关于java - java中有argsort函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31448608/