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.

 Respuesta aceptada

Luca Amerio
Luca Amerio el 26 de Mayo de 2015
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 comentarios

Stephen23
Stephen23 el 26 de Mayo de 2015
Editada: Stephen23 el 26 de Mayo de 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 el 26 de Mayo de 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 el 26 de Mayo de 2015
Thank you sir

Iniciar sesión para comentar.

Más respuestas (1)

Andrei Bobrov
Andrei Bobrov el 26 de Mayo de 2015
out = P([1;diff(P)] < 0);

5 comentarios

Raghavendra Reddy P
Raghavendra Reddy P el 26 de Mayo de 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 el 26 de Mayo de 2015
Editada: Thorsten el 26 de Mayo de 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 el 26 de Mayo de 2015
Editada: Andrei Bobrov el 26 de Mayo de 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 el 26 de Mayo de 2015
Thank you

Iniciar sesión para comentar.

Categorías

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by