Это еще одна операция, основанная на тех же матричных данных, о которых я говорил в предыдущем вопросе.У меня есть матрица, как показано ниже.
a = [1.05 2.1 3.4 1; 1.06 2.2 3.6 1; 2.04 2.3 3.8 2; 2.15 2.2 4.0 2; 1.37 2.3 3.7 1;3.12 2.1 4.1 3;3.02 2.2 4.2 3;3.42 2.3 4.5 3;3.24 2.4 4.8 3]
a =
1.0500 2.1000 3.4000 1.0000
1.0600 2.2000 3.6000 1.0000
2.0400 2.3000 3.8000 2.0000
2.1500 2.2000 4.0000 2.0000
1.3700 2.3000 3.7000 1.0000
3.1200 2.1000 4.1000 3.0000
3.0200 2.2000 4.2000 3.0000
3.4200 2.3000 4.5000 3.0000
3.2400 2.4000 4.8000 3.0000
a (:, 4) это номера групп.Основываясь на номерах групп, я разбил матричные данные на 3 группы: 1, 2 и 3.
Я хотел бы найти индекс значения, ближайший к 2,2, в (:, 2) в каждойгруппа .Из данных, которые вы видите, 2.2 в строке 2 принадлежит группе 1, 2.2 в строке 4 принадлежит группе 2, а 2.2 в строке 7 принадлежит группе 3.
Показан мой кодкак показано ниже:
[minValue,closestIndex] = splitapply(@(x)min(abs(2.2-x)), a(:,2), findgroups(a(:,4)))
Результат:
minValue =
0
0
0
Это согласуется, как мы можем найти из данных.
closestIndex =
2
2
2
Предполагается, что это индексы трех 2,2 в матрице, которые должны быть 2, 4 и 7. Но результат равен 2, 2 и 2.
Что такоене так с моим кодом?
Как решить эту проблему?