Exclusion of Columns in a matrix

2 次查看(过去 30 天)
My question is: I want to delete columns that possess the sum equal 1, however, when I use the function "for" occurs a problem....For each time that is deleted a column, the matrix is decreasing the number of columns, so that index used above exceed size of matrix....how can I solve this problem?
for j=1:794;
if S(j,1)==1;
X(:,j)=[];
end
end
when perform this command is showed:
??? Index of element to remove exceeds matrix dimensions.
thanks

采纳的回答

Andrei Bobrov
Andrei Bobrov 2012-1-3
X = X(:,~abs(sum(X) - 1)<1e3*eps);
OR
S = sum(X);
X = X(:,~abs(S - 1)<1e3*eps);
OR
X = X(:,abs(sum(X) - 1)>1e3*eps);
e.g.
>> X = randi(23,5)
X =
7 12 18 23 20
16 23 6 13 6
16 8 12 4 19
4 14 17 4 6
3 6 21 6 22
>> X(:,3) = .2
X =
7 12 0.2 23 20
16 23 0.2 13 6
16 8 0.2 4 19
4 14 0.2 4 6
3 6 0.2 6 22
>> X = X(:,abs(sum(X) - 1)>1e3*eps)
X =
7 12 23 20
16 23 13 6
16 8 4 19
4 14 4 6
3 6 6 22
>>
  3 个评论
Andrei Bobrov
Andrei Bobrov 2012-1-3
in this is case not need use loops "for..end".
just use e.g.:
X = X(:,abs(sum(X) - 1)>1e3*eps);

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by