Растянуть или пересчитать 1D массив - PullRequest
0 голосов
/ 17 ноября 2018

Этот вопрос может быть чем-то действительно простым, и мне может не хватать чего-то действительно простого, но как вы интерполируете одномерный массив в C #?

Допустим, у меня есть этот массив из n элементов

int[] array1 = new int[] { 1, 3, 5, 7, 1 };

Как растянуть или сжать массив так, чтобы он имел n значений и интерполировал значения, точно так же, как когда вы изменяете размер изображения, то есть, не обрезая или не добавляя нули или пустые значения в массив.

Например, если я хочу преобразовать массив, чтобы он имел n = 4 элемента, получите это

array1
>>[2, 4, 6, 4]

Strech example

я пытаюсь сделать то же самое, что и функция resample из matlab https://mathworks.com/help/signal/ref/resample.html

1 Ответ

0 голосов
/ 17 ноября 2018

Я предлагаю это решение для случая, когда новый массив короче старого:

int[] array1 = new int[] { 1, 3, 5, 7, 9 };
int[] array2 = new int[4];

for (var i = 0; i < array2.Length; i++)
{
    var doubleIndex1 = (double)i * array1.Length / array2.Length;
    var index1 = (int)Math.Floor(doubleIndex1);
    var rel = doubleIndex1 - index1;

    array2[i] = (int)Math.Round((1.0 - rel) * array1[index1] + rel * array1[index1 + 1]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...