# How can I find peak from matrix

3 views (last 30 days)
Phudit Kanittasut on 1 May 2021
Answered: Image Analyst on 1 May 2021
clear
[pks,locsBr] = findpeaks(pure_brain(:,2));
[pks,locsLiv] = findpeaks(pure_Liver(:,2));
figure
plot(xBrain(locsLiv(LvBrain)), YBrain, '.r')
hold on
plot(xLiver(locsLiv(LvLiver)), YLiver, '.b')
hold off
grid
% To find common peaks considering the threshold of 1E+4:
lB = locsBr(LvBrain);
lL = locsLiv(LvLiver);
s = max(length(lB), length(lL));
locsLivNew = [lL; false(s-length(lL),1)];
locsBrNew = [lB; false(s-length(lB),1)];
common = ismember(lB,lL);
I want to find peak from the data I have. From the screenshot the first column is X coordinate and the other are Y coordinate for each spectrum. I want to find peak spot for each spectrum

dpb on 1 May 2021
What's wrong with what you've done for the one?
findpeaks is one of the functions that has not been vectorized (owing to its complexity, no doubt) to operate by column on an input array by default.
So, just write a loop and iterate over the columns of interest...
for i=2:size(pure_brain,2)
[pksBr,locsBr] = findpeaks(pure_brain(:,i));
[pksLiv,locsLiv] = findpeaks(pure_Liver(:,i));
% process each pair here before going to next set
...
If you need to save the intermediate results, use cell arrays to save the returned peaks/locations of each type
Phudit Kanittasut on 1 May 2021
clear
rows=length(Data)
cols=width(Data)
for i = 2:cols
hold on
Xlocs = Data(:,1);
Ylocs = Data(:,i);
select = [Xlocs Ylocs]
plot(Data(:,1),Data(:,i));
[pks,locsLiv] = findpeaks(select(:,i));
hold off
end
This is my code and I just want to find peak from each spectrum from this data This first column is X coordinate and the rest are Y coordinate for each spectrum

Image Analyst on 1 May 2021
There were so many errors in your code that I can't explain them all. All I'm going to do is show you how it's done.
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 18;
whos Data
[rows, columns] = size(Data)
Xlocs = Data(:, 1);
for col = 2 : columns
thisColumnY = Data(:, col);
nexttile;
plot(Xlocs, Data(:, col), 'b-');
[peakValues, indexesOfPeaks] = findpeaks(thisColumnY, 'Threshold', 1000);
grid on;
hold on
plot(Xlocs(indexesOfPeaks), peakValues, 'rv', 'LineWidth', 2, 'MarkerSize', 7);
caption = sprintf('Column %d', col);
title(caption, 'FontSize', fontSize);
drawnow;
end
hold off;
g = gcf;
g.WindowState = 'maximized'
fprintf('Done running %s.m ...\n', mfilename);
but you should really take time to understand all the options for findpeaks() because I'm not sure what you consider to be a peak or not and there are just too many of them identified if you simply go with the defaults.