Это сообщение следует еще один пост: find common value of one matrix in another matrixозначают на основе максимального значения матрицы
Как я объяснил там, у меня есть одна матрица MyMatrix 2549x13double
несколько примеров строк из MyMatrix:
-7.80 -4.41 -0.08 2.51 6.31 6.95 4.97 2.91 0.66 -0.92 0.31 1.24 -0.07
4.58 5.87 6.18 6.23 5.20 4.86 5.02 5.33 3.69 1.36 -0.54 0.28 -1.20
-6.22 -3.77 1.18 2.85 -3.55 0.52 3.24 -7.77 -8.43 -9.81 -6.05 -5.88 -7.77
-2.21 -3.21 -4.44 -3.58 -0.89 3.40 6.56 7.20 4.30 -0.77 -5.09 -3.18 0.43
Я определил максимальное значение для каждой строки матрицы MyMatrix следующим образом:
[M Ind] = max (MyMatrix, [], 2); Пример линии ввода получить в М:
6.95
6.23
3.24
7.20
Теперь, я хотел бы выбрать в MyMatrix эти 2 значения до и после максимального значения, которые содержатся в М, так как мне нужно будет вычислить среднее значение этих 5 значений , Так, в примере, я хотел бы, чтобы выбрать:
2.51 6.31 6.95 4.97 2.91
5.87 6.18 6.23 5.20 4.86
-3.55 0.52 3.24 -7.77 -8.43
3.40 6.56 7.20 4.30 -0.77
и создать новый столбец в MyMatrix со средним значением этих 5 значений.
После кода по @Dan, взятый из предыдущего поста:
colInd = bsxfun(@plus,PeakInd, -2:2);
MyMatrixT = MyMatrix.';
rowIndT = colInd.';
linIndT = bsxfun(@plus,rowIndT,0:size(MyMatrixT,1):size(MyMatrixT,1)*(size(MyMatrixT,2)-1));
resultT = MyMatrixT(linIndT);
result = resultT.';
mean(result,2)
MyMatrix = [MyMatrix, mean(result,2)];
Вот новая часть поста, что касается этого вопроса, когда максимальное значение вблизи краев. Когда максимум является первым или последним столбцом MyMatrix, я хотел бы получить NaN.
Вместо этого, когда максимум находится во втором столбце, я хотел бы рассчитать среднее значение, считая один столбец, предшествующий максимальному, максимальному значению и двум столбцам, следующим за максимумом.
Хотя, когда максимум находится во втором последнем столбце, я хотел бы рассмотреть два столбца, предшествующие максимальному, максимальному значению и только одному столбцу, следующему максимуму.
Я был бы очень признателен, если бы вы могли мне помочь. Большое спасибо!
Довольно уверен, что это что мой второй код, просто использует 'nanmean'. Поэтому, если ваш макс был в столбце 2, вы получите что-то вроде '[NaN, 6,10, 4, 2]', поэтому 'nanmean' даст вам среднее значение' [6,10,4,2] ', которое использует 1 колонку preeding и два столбца, следующих за max ... – Dan
Единственное, что нужно добавить в комментарий @Dan, это то, что для получения «NaN», если ваш максимум находится в первом или последнем столбце, вам просто нужно его изменить конец.(Скажем, столбец, который вы собираетесь добавить, называется 'M2', а количество столбцов исходной матрицы было' N', вам нужно позвонить в 'M2 (Ind == 1 | Ind == N) = NaN; ') – BillBokeey
@BillBokeey no Я имел в виду, что я уже полностью ответил на это здесь http://stackoverflow.com/a/37705364/1011724 – Dan