拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 在matlab中的条件中洗掉矩阵中的行

在matlab中的条件中洗掉矩阵中的行

白鹭 - 2022-01-24 2072 0 0

我的程序创建了一个矩阵,其多行的单元格值在对应的列中是相同的。我想洗掉一些 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. 创建一个(列)矢量,其中包含每行中零的数量。
  2. 如果零的数量大于 1,则将矢量转换为包含 0(假)的逻辑阵列。
  3. 使用逻辑索引创建一个新矩阵,该矩阵仅包含具有 0 或 1 个零值的行。

或者:

  1. 如果零的数量大于 1,则将矢量转换为包含 1(真)的逻辑阵列。
  2. 使用逻辑索引从原始矩阵中洗掉包含 1 个以上零值的行。
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *