Pra*_*sas 6 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,:);
Run Code Online (Sandbox Code Playgroud)
这是一种方法:
result = M(all(bsxfun(@eq, M(:,I), V(I)), 2), :);
Run Code Online (Sandbox Code Playgroud)
怎么运行的
使用 的每一行M(:,I)
与行向量进行逐元素比较。选择列匹配的行。生成的逻辑向量用于索引 的行。V(I)
bsxfun
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
Run Code Online (Sandbox Code Playgroud)