Align curves along their minma

1 Ansicht (letzte 30 Tage)
Paola
Paola am 28 Okt. 2021
Kommentiert: Paola am 31 Okt. 2021
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 Kommentare
Image Analyst
Image Analyst am 28 Okt. 2021
@Paola I think my code below in my answer should solve it, right?
Paola
Paola am 31 Okt. 2021
Thank you very much @Image Analyst. It works perfectly :)

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Image Analyst
Image Analyst am 28 Okt. 2021
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;

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by