public static Vector selectByIndices()

in flink-ml-lib/src/main/java/org/apache/flink/ml/common/util/VectorUtils.java [34:61]


    public static Vector selectByIndices(Vector vector, int[] sortedIndices) {
        if (vector instanceof DenseVector) {
            DenseVector resultVec = new DenseVector(sortedIndices.length);
            for (int i = 0; i < sortedIndices.length; i++) {
                resultVec.set(i, vector.get(sortedIndices[i]));
            }
            return resultVec;
        } else {
            List<Integer> resultIndices = new ArrayList<>();
            List<Double> resultValues = new ArrayList<>();

            int[] indices = ((SparseVector) vector).indices;
            for (int i = 0, j = 0; i < indices.length && j < sortedIndices.length; ) {
                if (indices[i] == sortedIndices[j]) {
                    resultIndices.add(j++);
                    resultValues.add(((SparseVector) vector).values[i++]);
                } else if (indices[i] > sortedIndices[j]) {
                    j++;
                } else {
                    i++;
                }
            }
            return new SparseVector(
                    sortedIndices.length,
                    resultIndices.stream().mapToInt(Integer::intValue).toArray(),
                    resultValues.stream().mapToDouble(Double::doubleValue).toArray());
        }
    }