基于与向量

时间:2015-11-11 07:46:46

标签: matlab matrix conditional-statements

我试图根据原始矩阵的每个列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

2 个答案:

答案 0 :(得分:5)

这是bsxfun的标准用例:

O = bsxfun(@lt, M, N)

这里@lt调用“小于”函数,即它是<运算符的函数句柄。然后bsxfunN函数@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解决方案效率更高。