在 MATLAB 中根据矩阵内容分割矩阵

发布于 2024-11-26 05:22:27 字数 171 浏览 0 评论 0原文

矩阵有 m 行和 n 列(n 是不超过 10 的数字),第 n 列包含 1 或 0(二进制)。我想使用这个二进制文件作为取出关联行的决定(如果为 1,否则为 0)。我知道这可以通过使用 IF 条件的迭代来完成。

然而,对于行数 m 达到数百(最多 1000)的矩阵来说,这可能变得不切实际。还有哪些其他程序可用?

A matrix has m rows and n columns (n being a number not exceeding 10), and the nth column contains either 1 or 0 (binary). I want to use this binary as a decision to take out the associated row (if 1, or otherwise if 0). I understand that this can be done through iteration with the use of the IF conditional.

However, this may become impractical with matrices whose number of rows m gets into the hundreds (up to 1000). What other procedures are available?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌酱 2024-12-03 05:22:27

您可以使用 逻辑 数据类型用于索引。例如,

中号=

<前><代码> 1 2 0
4 5 1
7 8 0

M = [1 2 0;4 5 1;7 8 0];
v = (M(:,n) == 1);
M(v,2) = 1;

中号=

<前><代码> 1 2 0
4 1 1
7 8 0

现在,如果 n 列中的相应元素为 true,则您已将第 2 列中的所有元素设置为 1。

请注意,v = (M(:,n) == 1) 会将第 n 列转换为逻辑向量。您可以使用 v =逻辑(M(:,n)); 完成相同的任务,

我会推荐这个博客条目详细了解逻辑索引。

更新:

如果您想删除行,请使用:

M(v,:) = [];

You can use logical datatypes for indexing. For example,

M =

 1     2     0
 4     5     1
 7     8     0
M = [1 2 0;4 5 1;7 8 0];
v = (M(:,n) == 1);
M(v,2) = 1;

M =

 1     2     0
 4     1     1
 7     8     0

Now you have set all the elements in column 2 to 1 if the corresponding element in column n is true.

Note that the v = (M(:,n) == 1) converts the nth column to a logical vector. You can accomplish the same with v = logical(M(:,n));

I would recommend this blog entry for a detailed look at logical indexing.

Update:

If you want to erase rows, then use:

M(v,:) = [];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文