Partition a Big Matrix Into Pieces According to Values from A Vector

5 ビュー (過去 30 日間)
Alessandro
Alessandro 2014 年 3 月 4 日
コメント済み: Alessandro 2014 年 3 月 4 日
I have a big matrix (approx 2000x2000 size). Based on another boolean vector (which is 2000x1), i want to remove rows or columns from a copy of the original big matrix, wether the i-th element of the vector is equal to 0 or not. By using the following code:
if true
A = rand(2000); % Generate Random Matrix
b = zeros(2000,1); % Initialize Vector
for l=1:size(b,1)
c = rand(1);
if c>0.5;
b(l,1) = 1; % Just Putting Random 1's in the Vector
end
row_id = find(Boun); % Create a Vector Containing the Indices of Rows/Columns to Eliminate
A_copy = A; % Copy of the Original Matrix
counter = 0; % Create a Counter
for m=1:size(row_id,1);
A_copy(row_id(m)-counter,:) = []; % Eliminate row
A_copy(:,row_id(m)-counter,:) = []; % Eliminate column
counter = counter +1
end
end
The efficiency of the method is very poor. I know that messing around with matrices dimensions is not a good idea. Any suggestions?
Thanks in advance.

採用された回答

the cyclist
the cyclist 2014 年 3 月 4 日
Instead of the for loop, you can do
A_copy(row_id,:) = []; % Eliminate rows
A_copy(:,row_id) = []; % Eliminate columns
  1 件のコメント
Alessandro
Alessandro 2014 年 3 月 4 日
Thanks, this makes me save a lot of time!

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

その他の回答 (0 件)

カテゴリ

Help Center および 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