标签: arrays matlab matrix
说我有以下内容:
我想在匹配位置 I 过滤所有与 V 相同的 M 行。我相信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,:);
答案 0 :(得分:3)
以这种方式:
result = M(all(bsxfun(@eq, M(:,I), V(I)), 2), :);
工作原理
M(:,I)的每一行使用bsxfun与行向量V(I)进行元素比较。选择all列匹配的行。生成的逻辑向量用于索引M的行。
M(:,I)
bsxfun
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