基于与向量相同的索引的列的条件

asp*_*sia 4 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
Run Code Online (Sandbox Code Playgroud)

我希望的解决方案是,对于每一列M(:,i),值小于N(i):

     1     1     0     0
     0     0     0     1
     1     0     1     0
Run Code Online (Sandbox Code Playgroud)

Dan*_*Dan 5

这是一个标准用例bsxfun:

O = bsxfun(@lt, M, N)
Run Code Online (Sandbox Code Playgroud)

这里@lt调用"小于"函数,即它是<操作符的函数句柄.bsxfun然后,N通过将函数@lt应用于每一行M和整行,将沿着其单一维度"扩展" N.

请注意,您可以使用for-loop 轻松实现相同的功能:

O = zeros(size(M));
for row = 1:size(M,1)
    O(row,:) = M(row,:) < N;
end
Run Code Online (Sandbox Code Playgroud)

或者使用repmat:

O = M < repmat(N, size(M,1), 1);
Run Code Online (Sandbox Code Playgroud)

但在MATLAB中,bsxfun通常效率最高.

  • 我在那里学到的不仅仅是问题的答案,谢谢! (2认同)