Align curves along their minma

6 ビュー (過去 30 日間)
Paola
Paola 2021 年 10 月 28 日
コメント済み: Paola 2021 年 10 月 31 日
Hi all,
I have a matrix (33X 5000) and each row of this matrix is a curve. I want to center all the curves along their minima, which I have already found and it is the column vector m=(51X1). I tried with a loop but it is not working. Can you help me with that? thanks .
  7 件のコメント
Image Analyst
Image Analyst 2021 年 10 月 28 日
@Paola I think my code below in my answer should solve it, right?
Paola
Paola 2021 年 10 月 31 日
Thank you very much @Image Analyst. It works perfectly :)

サインインしてコメントする。

採用された回答

Image Analyst
Image Analyst 2021 年 10 月 28 日
Try this:
% Create sample data.
b = rand(33, 5000);
% Find the location (index) of the min in each row of b.
[minValues, indexOfMins] = min(b, [], 2);
[rows, columns] = size(b)
% Allocate space to place the aligned vectors.
bCentered = nan(rows, 2 * columns - 1);
% Shift each row of b such that the min occurs at column "columns".
for row = 1 : rows
% Find out where the start of this row should begin in the output matrix.
startingColumn = columns - indexOfMins(row) + 1;
% Paste it there.
bCentered(row, startingColumn : startingColumn + columns - 1) = b(row, :);
end
% Now they're all aligned with the min showing up at column "columns"
% which is in the middle of the bCentered array.
% Optional : If you want to crop off columns of all nans to the right and left, do this:
goodColumns = ~all(isnan(bCentered), 1);
firstGoodColumn = find(goodColumns, 1, 'first')
lastGoodColumn = find(goodColumns, 1, 'last')
% Extract (crop out) the good columns
bCentered = bCentered(:, firstGoodColumn:lastGoodColumn);
% Optional: replace nan's with some filler value, like 0 or -1 or whatever you want.
bCentered(isnan(bCentered)) = 0;

その他の回答 (0 件)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by