gpt4 book ai didi

arrays - 通过不带循环的多列值过滤矩阵(Matlab)?

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:14 24 4
gpt4 key购买 nike

假设我有以下内容:

  • 数据矩阵M(m-by-n);
  • 匹配行V(1-by-n);
  • 匹配位置 I(1-by-n 逻辑);

我想过滤 M 中与 V 在匹配位置 I 具有相同值的所有行。我相信 Matlab 索引功能足够强大,可以在没有循环的情况下做到这一点。但是如何呢?


当前解决方案:遍历所有列并更新过滤后的行位置 F(m-by-1 逻辑)。

F = true(m,1);
for k = 1:n;
if I(k);
F = F & (M(:,k)==V(k));
end;
end;
M = M(F,:);

最佳答案

这是一种方法:

result = M(all(bsxfun(@eq, M(:,I), V(I)), 2), :);

工作原理

使用 bsxfunM(:,I) 的每一行与行向量 V(I) 按元素进行比较. all 的行匹配的列被选中。生成的逻辑向量用于索引 M 的行。

示例

M = [ 8     3     6     9
5 4 9 8
8 9 6 9 ];
I = [ true false true true ];
V = [ 8 1 6 9 ];

>> result = M(all(bsxfun(@eq, M(:,I), V(I)), 2), :)
result =
8 3 6 9
8 9 6 9

关于arrays - 通过不带循环的多列值过滤矩阵(Matlab)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com