Align curves along their minma
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Image Analyst
le 28 Oct 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;
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Image Processing Toolbox dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!