I have a vector P =
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
19
20
21
3
23
24
6
26
27
28
29
30
31
32
As per the ascending order (1 2...15..32) of vector P, the elements 18,25,28 are missing and their position is occupied by the elements 2,3,6. now i want a vector which indicates this numbers like n=[2 3 6]. if elements are in order perfectly (1:10), I don't want new vector n.

 Akzeptierte Antwort

Luca Amerio
Luca Amerio am 26 Mai 2015

0 Stimmen

This will do the trick
P(~(P==1:length(P)))
just for clarification
P==1:length(P)
returns a logical array of the position occupied by the right number.
~(P==1:length(P))
is the logical array of the position occupied by the WRONG number
P(~(P==1:length(P)))
get the values in those positions.

5 Kommentare

Stephen23
Stephen23 am 26 Mai 2015
Bearbeitet: Stephen23 am 26 Mai 2015
Or a little simpler:
P(P~=1:length(P))
E.g.:
>> P = [1,2,9,4,5,6,1,8,9];
>> P(P~=1:length(P))
ans =
9 1
Thank you sir, but for P =
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
19
20
21
3
23
24
6
26
27
28
29
30
31
32
your code giving error like >> P(P~=1:length(P)) Error using ~= Matrix dimensions must agree.
Raghavendra Reddy P
Raghavendra Reddy P am 26 Mai 2015
i have checked that your code P(~(P==1:length(P))) Works if P is a row vector.
what changes i should incorporate in above code to work if P is column vector. Am not interested to convert row to column and vice-versa.
P(P(:)'~=1:length(P))
Raghavendra Reddy P
Raghavendra Reddy P am 26 Mai 2015
Thank you sir

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Andrei Bobrov
Andrei Bobrov am 26 Mai 2015

0 Stimmen

out = P([1;diff(P)] < 0);

5 Kommentare

Raghavendra Reddy P
Raghavendra Reddy P am 26 Mai 2015
Thank you but for >> P = [1,2,9,4,5,6,1,8,9]; Am getting error like >> out = P([1;diff(P)] < 0) Error using vertcat Dimensions of matrices being concatenated are not consistent.
Thorsten
Thorsten am 26 Mai 2015
Bearbeitet: Thorsten am 26 Mai 2015
You have to convert P to a column vector
P = P(:);
out = P([1;diff(P)] < 0);
or use "," instead of ";", but this works only if P is a row vector
out = P([1,diff(P)] < 0);
Raghavendra Reddy P
Raghavendra Reddy P am 26 Mai 2015
Bearbeitet: Andrei Bobrov am 26 Mai 2015
for P = [1,2,9,4,5,6,1,8,9] if i use code out = P([1,diff(P)] < 0) am getting out = [ 4 1] instead of [9 1]
P(strfind([P(1);diff(P(:))]' ~= 1,[1 1]))
Raghavendra Reddy P
Raghavendra Reddy P am 26 Mai 2015
Thank you

Melden Sie sich an, um zu kommentieren.

Kategorien

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by