Finding local minima about either side of a maxima in a matrix in matlab
For some "big data" processing. When plotted my data is sign wave like but with random peaks. (So imagine plotting the value of each matrix position against it's position)
I know how to find the peaks, but I need a way of then finding the value of local minima either side of the peaks and the position in the matrix. For example, if the data were:
3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0
The function I need would return something like: min,loc = [0, -6; 4, 11]
matlab max min minima
add a comment |
For some "big data" processing. When plotted my data is sign wave like but with random peaks. (So imagine plotting the value of each matrix position against it's position)
I know how to find the peaks, but I need a way of then finding the value of local minima either side of the peaks and the position in the matrix. For example, if the data were:
3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0
The function I need would return something like: min,loc = [0, -6; 4, 11]
matlab max min minima
So if you know how to find peaks in a vectorx
, to find the minima just find the peaks of-x
.
– obchardon
Nov 14 '18 at 14:09
add a comment |
For some "big data" processing. When plotted my data is sign wave like but with random peaks. (So imagine plotting the value of each matrix position against it's position)
I know how to find the peaks, but I need a way of then finding the value of local minima either side of the peaks and the position in the matrix. For example, if the data were:
3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0
The function I need would return something like: min,loc = [0, -6; 4, 11]
matlab max min minima
For some "big data" processing. When plotted my data is sign wave like but with random peaks. (So imagine plotting the value of each matrix position against it's position)
I know how to find the peaks, but I need a way of then finding the value of local minima either side of the peaks and the position in the matrix. For example, if the data were:
3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0
The function I need would return something like: min,loc = [0, -6; 4, 11]
matlab max min minima
matlab max min minima
asked Nov 14 '18 at 13:49
user2587726user2587726
2327
2327
So if you know how to find peaks in a vectorx
, to find the minima just find the peaks of-x
.
– obchardon
Nov 14 '18 at 14:09
add a comment |
So if you know how to find peaks in a vectorx
, to find the minima just find the peaks of-x
.
– obchardon
Nov 14 '18 at 14:09
So if you know how to find peaks in a vector
x
, to find the minima just find the peaks of -x
.– obchardon
Nov 14 '18 at 14:09
So if you know how to find peaks in a vector
x
, to find the minima just find the peaks of -x
.– obchardon
Nov 14 '18 at 14:09
add a comment |
2 Answers
2
active
oldest
votes
If you have access to R2017b or later, check out the islocalmax and islocalmin functions.
I'm stuck as a 2017a pleb right now :/
– user2587726
Nov 15 '18 at 10:40
add a comment |
MATLAB R2007a and newer have a function called findpeaks
(which requires the Signal Processing Toolbox). The syntax that you're looking for is
[pks,locs] = findpeaks(data)
Specifically,
>> [pks,locs] = findpeaks(-[3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0]) % note it's "-[data]"
pks =
0 6
locs =
4 11
The minus is because we want the "valleys" and not "peaks", so make sure you don't forget to negate pks
afterwards.
Whilst findpeaks works for this example, my actual data is much longer and this doesn't work I'm afraid (My apologies for not making this clear in my original question). Imagine the data were: A = [-9 3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0 -9]; Then findpeaks(-A) would find the -9's, not the 0 and -6.
– user2587726
Nov 15 '18 at 10:23
@user2587726 you can configure the "prominence" of the extrema thatfindpeaks
returns. See here. Also, you can usesign(diff(data))
, then look for[-1 1]
in the resulting vector.
– Dev-iL
Nov 15 '18 at 16:01
I'm confused about why you say findpeaks wouldn't find the 0 and -6. By default, it will (actually in the example you gave it won't find the -9 because they are on the ends). When I try this, I get peaks of 0 and 6 at locations 5 and 12 (which you'd then negate). If you also want the endpoints, just add -inf to both ends of the input.
– CKT
Nov 15 '18 at 17:53
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53301780%2ffinding-local-minima-about-either-side-of-a-maxima-in-a-matrix-in-matlab%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
If you have access to R2017b or later, check out the islocalmax and islocalmin functions.
I'm stuck as a 2017a pleb right now :/
– user2587726
Nov 15 '18 at 10:40
add a comment |
If you have access to R2017b or later, check out the islocalmax and islocalmin functions.
I'm stuck as a 2017a pleb right now :/
– user2587726
Nov 15 '18 at 10:40
add a comment |
If you have access to R2017b or later, check out the islocalmax and islocalmin functions.
If you have access to R2017b or later, check out the islocalmax and islocalmin functions.
answered Nov 14 '18 at 14:27
CKTCKT
72645
72645
I'm stuck as a 2017a pleb right now :/
– user2587726
Nov 15 '18 at 10:40
add a comment |
I'm stuck as a 2017a pleb right now :/
– user2587726
Nov 15 '18 at 10:40
I'm stuck as a 2017a pleb right now :/
– user2587726
Nov 15 '18 at 10:40
I'm stuck as a 2017a pleb right now :/
– user2587726
Nov 15 '18 at 10:40
add a comment |
MATLAB R2007a and newer have a function called findpeaks
(which requires the Signal Processing Toolbox). The syntax that you're looking for is
[pks,locs] = findpeaks(data)
Specifically,
>> [pks,locs] = findpeaks(-[3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0]) % note it's "-[data]"
pks =
0 6
locs =
4 11
The minus is because we want the "valleys" and not "peaks", so make sure you don't forget to negate pks
afterwards.
Whilst findpeaks works for this example, my actual data is much longer and this doesn't work I'm afraid (My apologies for not making this clear in my original question). Imagine the data were: A = [-9 3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0 -9]; Then findpeaks(-A) would find the -9's, not the 0 and -6.
– user2587726
Nov 15 '18 at 10:23
@user2587726 you can configure the "prominence" of the extrema thatfindpeaks
returns. See here. Also, you can usesign(diff(data))
, then look for[-1 1]
in the resulting vector.
– Dev-iL
Nov 15 '18 at 16:01
I'm confused about why you say findpeaks wouldn't find the 0 and -6. By default, it will (actually in the example you gave it won't find the -9 because they are on the ends). When I try this, I get peaks of 0 and 6 at locations 5 and 12 (which you'd then negate). If you also want the endpoints, just add -inf to both ends of the input.
– CKT
Nov 15 '18 at 17:53
add a comment |
MATLAB R2007a and newer have a function called findpeaks
(which requires the Signal Processing Toolbox). The syntax that you're looking for is
[pks,locs] = findpeaks(data)
Specifically,
>> [pks,locs] = findpeaks(-[3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0]) % note it's "-[data]"
pks =
0 6
locs =
4 11
The minus is because we want the "valleys" and not "peaks", so make sure you don't forget to negate pks
afterwards.
Whilst findpeaks works for this example, my actual data is much longer and this doesn't work I'm afraid (My apologies for not making this clear in my original question). Imagine the data were: A = [-9 3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0 -9]; Then findpeaks(-A) would find the -9's, not the 0 and -6.
– user2587726
Nov 15 '18 at 10:23
@user2587726 you can configure the "prominence" of the extrema thatfindpeaks
returns. See here. Also, you can usesign(diff(data))
, then look for[-1 1]
in the resulting vector.
– Dev-iL
Nov 15 '18 at 16:01
I'm confused about why you say findpeaks wouldn't find the 0 and -6. By default, it will (actually in the example you gave it won't find the -9 because they are on the ends). When I try this, I get peaks of 0 and 6 at locations 5 and 12 (which you'd then negate). If you also want the endpoints, just add -inf to both ends of the input.
– CKT
Nov 15 '18 at 17:53
add a comment |
MATLAB R2007a and newer have a function called findpeaks
(which requires the Signal Processing Toolbox). The syntax that you're looking for is
[pks,locs] = findpeaks(data)
Specifically,
>> [pks,locs] = findpeaks(-[3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0]) % note it's "-[data]"
pks =
0 6
locs =
4 11
The minus is because we want the "valleys" and not "peaks", so make sure you don't forget to negate pks
afterwards.
MATLAB R2007a and newer have a function called findpeaks
(which requires the Signal Processing Toolbox). The syntax that you're looking for is
[pks,locs] = findpeaks(data)
Specifically,
>> [pks,locs] = findpeaks(-[3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0]) % note it's "-[data]"
pks =
0 6
locs =
4 11
The minus is because we want the "valleys" and not "peaks", so make sure you don't forget to negate pks
afterwards.
answered Nov 14 '18 at 16:18
Dev-iLDev-iL
17.2k64377
17.2k64377
Whilst findpeaks works for this example, my actual data is much longer and this doesn't work I'm afraid (My apologies for not making this clear in my original question). Imagine the data were: A = [-9 3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0 -9]; Then findpeaks(-A) would find the -9's, not the 0 and -6.
– user2587726
Nov 15 '18 at 10:23
@user2587726 you can configure the "prominence" of the extrema thatfindpeaks
returns. See here. Also, you can usesign(diff(data))
, then look for[-1 1]
in the resulting vector.
– Dev-iL
Nov 15 '18 at 16:01
I'm confused about why you say findpeaks wouldn't find the 0 and -6. By default, it will (actually in the example you gave it won't find the -9 because they are on the ends). When I try this, I get peaks of 0 and 6 at locations 5 and 12 (which you'd then negate). If you also want the endpoints, just add -inf to both ends of the input.
– CKT
Nov 15 '18 at 17:53
add a comment |
Whilst findpeaks works for this example, my actual data is much longer and this doesn't work I'm afraid (My apologies for not making this clear in my original question). Imagine the data were: A = [-9 3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0 -9]; Then findpeaks(-A) would find the -9's, not the 0 and -6.
– user2587726
Nov 15 '18 at 10:23
@user2587726 you can configure the "prominence" of the extrema thatfindpeaks
returns. See here. Also, you can usesign(diff(data))
, then look for[-1 1]
in the resulting vector.
– Dev-iL
Nov 15 '18 at 16:01
I'm confused about why you say findpeaks wouldn't find the 0 and -6. By default, it will (actually in the example you gave it won't find the -9 because they are on the ends). When I try this, I get peaks of 0 and 6 at locations 5 and 12 (which you'd then negate). If you also want the endpoints, just add -inf to both ends of the input.
– CKT
Nov 15 '18 at 17:53
Whilst findpeaks works for this example, my actual data is much longer and this doesn't work I'm afraid (My apologies for not making this clear in my original question). Imagine the data were: A = [-9 3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0 -9]; Then findpeaks(-A) would find the -9's, not the 0 and -6.
– user2587726
Nov 15 '18 at 10:23
Whilst findpeaks works for this example, my actual data is much longer and this doesn't work I'm afraid (My apologies for not making this clear in my original question). Imagine the data were: A = [-9 3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0 -9]; Then findpeaks(-A) would find the -9's, not the 0 and -6.
– user2587726
Nov 15 '18 at 10:23
@user2587726 you can configure the "prominence" of the extrema that
findpeaks
returns. See here. Also, you can use sign(diff(data))
, then look for [-1 1]
in the resulting vector.– Dev-iL
Nov 15 '18 at 16:01
@user2587726 you can configure the "prominence" of the extrema that
findpeaks
returns. See here. Also, you can use sign(diff(data))
, then look for [-1 1]
in the resulting vector.– Dev-iL
Nov 15 '18 at 16:01
I'm confused about why you say findpeaks wouldn't find the 0 and -6. By default, it will (actually in the example you gave it won't find the -9 because they are on the ends). When I try this, I get peaks of 0 and 6 at locations 5 and 12 (which you'd then negate). If you also want the endpoints, just add -inf to both ends of the input.
– CKT
Nov 15 '18 at 17:53
I'm confused about why you say findpeaks wouldn't find the 0 and -6. By default, it will (actually in the example you gave it won't find the -9 because they are on the ends). When I try this, I get peaks of 0 and 6 at locations 5 and 12 (which you'd then negate). If you also want the endpoints, just add -inf to both ends of the input.
– CKT
Nov 15 '18 at 17:53
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53301780%2ffinding-local-minima-about-either-side-of-a-maxima-in-a-matrix-in-matlab%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
So if you know how to find peaks in a vector
x
, to find the minima just find the peaks of-x
.– obchardon
Nov 14 '18 at 14:09