Изменение размеров 1D массива с помощью сплайн-функций с использованием Apache Math - Как? - PullRequest
0 голосов
/ 11 декабря 2019

Я ищу пример изменения размера одномерного массива с использованием сплайн-функций с Apache Commons - Math.

Мне нужен метод расширения и / или сжатия входного массива (double []).

Я не смог найти хороший пример попытки поиска в Интернете.

1 Ответ

1 голос
/ 11 декабря 2019

Хитрость в том, что вам нужно два arrays для создания spline, но у вас есть только один. Таким образом, вам необходимо изготовить и array. Вы можете предположить, что входные данные array содержат ваши y значения и что новый изготовленный массив содержит ваши x значения, поэтому для любого заданного x у вас есть соответствующий y.

Отказ от ответственности, я не проверял этот код, поэтому обязательно настройте его соответствующим образом.

// To expand the array
public static double[] expand(double[] array, int newSize) {

    final int length array.length;

    // let's calculate the new step size
    double step = (length * 1.0) / newSize;

    // fabricated array of x values
    int[] x = new int[length];
    for(int i = 0; i < length; ++i) {
        x[i] = i;
    }

    // using Linear interpolator but it can be any other interpolator
    LinearInterpolator li = new LinearInterpolator(); // or other interpolator
    PolynomialSplineFunction psf = li.interpolate(x, array);

    double[] expandedArray = new double[newSize];
    double xi = x[0];
    for (int i = 0; i < newSize; ++i) {
       expandedArray[i] = psf.value(xi);
       xi += step;
    }
    return expandedArray ;
}

Для shrink массива вы можете либо decimate вход array т.е. просто создатьновый меньший array и просто возьмите значения, основанные на новом размере шага, или используйте interpolator, как указано выше.

...