Interp1 (x, y, xq) в matlab, когда x, xq: числовой массив и y: строковый массив

Есть ли способ использовать функцию interp1 как interp1(x,y,xq), когда x,xq: - числовые массивы, а y: - массив строк?

Или вы можете придумать для этого эквивалентный векторный способ?

Я не хочу конвертировать в таблицу и использовать tablelookup.

Пример:

x = [1, 3, 4, 7, 8];
y = ["A", "A", "B", "C", "C"];
xq = [2.5, 5, 6.7];
interp1 - это функция математический. Как бы вы вообще его определили в терминах строки? y содержит числа? По крайней мере, я на это надеюсь, и в этом случае вы можете использовать str2double(y), если это не числа, пожалуйста, поясните, что вы определяете интерполяцию на основе строк.
Adriaan 13.09.2018 20:31

Пожалуйста, редактировать вопрос, чтобы он содержал минимальный воспроизводимый пример, таким образом, дайте примеры входных данных x, xq и y, и дайте пример вывода того, как вы хотите, чтобы это выглядело.

Adriaan 13.09.2018 21:28

Какого результата вы ожидаете? Что такое yq для xq=6.7? Это где-то между «Б» и «С», ближе к «С». Что здесь?

Cris Luengo 13.09.2018 21:51

@CrisLuengo: это может быть любая стратегия заполнения: ближайшая, предыдущая, следующая. Проверьте ответ ниже :)

Soyol 13.09.2018 22:02

Но это не интерполяция ... по крайней мере, концептуально.

Cris Luengo 13.09.2018 23:19
0
5
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что вы хотите какого-то ближайшего соседа или упорядоченного вменения. В этом случае вы можете использовать interp1, но интерполировать на индексы исходного массива, а затем использовать результат для индексации исходных значений.

>> x = [1 3 4 7 8];
>> y = ["hi" "hello" "bonjour" "hallo" "hola"];
>> xq = [2 5 6];
>> yq = y(interp1(x,1:length(x),xq,'nearest'))
yq = 
  1×3 string array
    "hello"    "bonjour"    "hallo"

Другие вопросы по теме