Я ищу пример изменения размера одномерного массива с использованием функций сплайна с Apache Commons - Math.
Мне нужен метод расширения и/или сжатия входного массива (double[]).
Я не смог найти хороший пример, пытаясь найти в Интернете.
Я ищу пример изменения размера одномерного массива с использованием функций сплайна с Apache Commons - Math.
Мне нужен метод расширения и/или сжатия входного массива (double[]).
Я не смог найти хороший пример, пытаясь найти в Интернете.
Хитрость здесь в том, что вам нужно два 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 = (double) length / (newSize + 1);
// fabricated array of x values
double[] x = new double[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 - 1; ++i) {
expandedArray[i] = psf.value(xi);
xi += step;
}
expandedArray[newSize - 1] = array[length - 1];
return expandedArray;
}
Для shrink
массива вы можете либо decimate
ввести array
, то есть просто создать новый меньший array
и просто взять значения на основе нового размера шага, либо использовать interpolator
, как и раньше:
// To shrink the array
public static double[] shrink(double[] array, int newSize) {
final int length = array.length;
// let's calculate the new step size
double step = (double) length / (newSize - 1);
// fabricated array of x values
double[] x = new double[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 - 1; ++i) {
expandedArray[i] = psf.value(xi);
xi += step;
}
expandedArray[newSize - 1] = array[length - 1];
return expandedArray;
}