I want to delete corresponded rows in mother matrix x when x2 have duplicated rows, the following code may explain the goal:
x=[1 0 0 1 1;1 0 1 0 1;1 1 0 0 1]; %mother matrix
y=[5 -2 -1 -1 -1];
x2=[];
for k=1:size(x,1)
x2=[x2;x(k,:)*y'];
end
so this code will give x2=[3;3;2] which means row '1' and row '2' are considered the same and I want to use only one row and delete the other, how can I do that?

1 件のコメント

Walter Roberson
Walter Roberson 2016 年 9 月 23 日
Does the order of the rows need to stay the same?

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

 採用された回答

Walter Roberson
Walter Roberson 2016 年 9 月 23 日

0 投票

[x2u, x2u_idx] = unique(x2, 'stable');
new_x = x(x2u_idx, :);

1 件のコメント

JacobM
JacobM 2016 年 9 月 23 日
Perfect! thanks Walter

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

その他の回答 (1 件)

Thorsten
Thorsten 2016 年 9 月 23 日

0 投票

new_x = x(unique(x2),:);

3 件のコメント

JacobM
JacobM 2016 年 9 月 23 日
編集済み: JacobM 2016 年 9 月 23 日
I thought of this too but this command would remove the rows in x2 but not x, I want to remove the rows in x that corresponds to duplicated one in x2. and also the problem is that, the number of rows in x is not fixed and it may increase or decrease. so I want to have the code generalised.
I thought also of using the for loop but it would take more time for big matrix,
what do you think?
JacobM
JacobM 2016 年 9 月 23 日
x=[1 0 0 1 1;1 0 1 0 1;1 1 0 0 1];
y=[5 -2 -1 -1 -1];
x2=[];
for k=1:size(x,1)
x2=[x2;x(k,:)*y'];
end
[x_val,x_idx]=unique(x2);
for i=1:size(x_idx)
j=x_idx(i);
new_x(i,:)=x(j,:);
end
i did this and it works but looking for simpler code?
JacobM
JacobM 2016 年 9 月 23 日
Thanks Thorsten for your input, it is really appreciated!

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

カテゴリ

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

質問済み:

2016 年 9 月 23 日

コメント済み:

2016 年 9 月 23 日

Community Treasure Hunt

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

Start Hunting!

Translated by