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.

 採用された回答

Luca Amerio
Luca Amerio 2015 年 5 月 26 日

0 投票

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 件のコメント

Stephen23
Stephen23 2015 年 5 月 26 日
編集済み: Stephen23 2015 年 5 月 26 日
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
Raghavendra Reddy P
Raghavendra Reddy P 2015 年 5 月 26 日
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 2015 年 5 月 26 日
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.
Andrei Bobrov
Andrei Bobrov 2015 年 5 月 26 日
P(P(:)'~=1:length(P))
Raghavendra Reddy P
Raghavendra Reddy P 2015 年 5 月 26 日
Thank you sir

サインインしてコメントする。

その他の回答 (1 件)

Andrei Bobrov
Andrei Bobrov 2015 年 5 月 26 日

0 投票

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

5 件のコメント

Raghavendra Reddy P
Raghavendra Reddy P 2015 年 5 月 26 日
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 2015 年 5 月 26 日
編集済み: Thorsten 2015 年 5 月 26 日
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 2015 年 5 月 26 日
編集済み: Andrei Bobrov 2015 年 5 月 26 日
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]
Andrei Bobrov
Andrei Bobrov 2015 年 5 月 26 日
P(strfind([P(1);diff(P(:))]' ~= 1,[1 1]))
Raghavendra Reddy P
Raghavendra Reddy P 2015 年 5 月 26 日
Thank you

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeCreating and Concatenating Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by