我试图根据原始矩阵的每个列M(:,i)
特定的条件获取逻辑矩阵,基于相同索引i
的值向量N
,即N(i)
。
我在网上看了这个,但找不到任何类似的东西。必须有一种简单而干净的方法。
M =
3 -1 100 8
200 2 300 4
-10 0 0 400
N =
4 0 90 7
我想要的解决方案是,对于M(:,i)
的每一列,值小于N(i)
:
1 1 0 0
0 0 0 1
1 0 1 0
答案 0 :(得分:5)
这是bsxfun
的标准用例:
O = bsxfun(@lt, M, N)
这里@lt
调用“小于”函数,即它是<
运算符的函数句柄。然后bsxfun
将N
函数@lt
应用于M
的每一行和N
的整行,然后for
沿其单一维度展开“O = zeros(size(M));
for row = 1:size(M,1)
O(row,:) = M(row,:) < N;
end
。
请注意,使用repmat
循环:
O = M < repmat(N, size(M,1), 1);
或者使用bsxfun
:
>whereBetween
但在MATLAB中,->whereBetween
通常效率最高。
答案 1 :(得分:3)
使用arrayfun
可能的两行解决方案将比较应用于每个列和索引对:
T = arrayfun(@(jj)M(:,jj) < N(jj), 1:numel(N), 'UniformOutput', false);
result = cat(2,T{:});
编辑:当然,bsxfun解决方案效率更高。