我的程序创建了一个矩阵,其多行的单元格值在对应的列中是相同的。我想洗掉一些 0 多于 1 的行。为了澄清,我的矩阵具有以下形式,
A=[ 1 1 1 0 0 1 1 1; 1 0 0 1 1 1 1 1 1; 1 1 1 1 1 1 1 0; 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 ]
我想洗掉第一、第二和第五行中的所有列,因为数字 0 在第三和第四行的行矩阵中剩下 2 个或更多,因为它们在每一行中有 0 个。结果应该是以下矩阵:
A=[ 1 1 1 1 1 1 1 1 0; 1 1 1 1 0 1 1 1 ]
uj5u.com热心网友回复:
我为你的算法撰写了这段代码,而不是正常作业:
% Input Matrix
A = [1 1 1 0 0 1 1 1;1 0 0 1 1 1 1 1; 1 1 1 1 1 1 1 0;1 1 1 1 0 1 1 1;1 1 0 1 0 0 1 1 ];
% find number of rows and cols
[num_rows, num_cols] = size(A);
% Itrate on each row and find rows that have less than 2 zeros
selected_rows = [];
idx = 1;
for i=1:num_rows
num_zero = sum(A(i, 1:end) == 0);
if num_zero < 2
selected_rows(idx) = i;
idx = idx 1;
end
end
% return result matrix
result = [];
for i=1:length(selected_rows)
result = [result; A(selected_rows(i), 1:end)];
end
disp(result)
uj5u.com热心网友回复:
- 创建一个(列)矢量,其中包含每行中零的数量。
- 如果零的数量大于 1,则将矢量转换为包含 0(假)的逻辑阵列。
- 使用逻辑索引创建一个新矩阵,该矩阵仅包含具有 0 或 1 个零值的行。
或者:
- 如果零的数量大于 1,则将矢量转换为包含 1(真)的逻辑阵列。
- 使用逻辑索引从原始矩阵中洗掉包含 1 个以上零值的行。
0 评论