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

Matlab 基于与向量相同索引的列的条件,matlab,matrix,conditional-statements,Matlab,Matrix,Conditional Statements,我试图根据向量N中相同索引I的值,根据特定于原始矩阵的每列m(:,I)的条件,得到一个逻辑矩阵,即N(I) 我在网上查过这个,但找不到任何类似的东西。必须有一个简单而干净的方法来做到这一点 M = 3 -1 100 8 200 2 300 4 -10 0 0 400 N = 4 0 90 7 我想要的解决方案是,对于M(:,i)的每一列,值小于N(i): 使用arrayfun将

我试图根据向量
N
中相同索引
I
的值,根据特定于原始矩阵的每列
m(:,I)
的条件,得到一个逻辑矩阵,即
N(I)

我在网上查过这个,但找不到任何类似的东西。必须有一个简单而干净的方法来做到这一点

M =

     3    -1   100     8
   200     2   300     4
   -10     0     0   400

N =

     4     0    90     7
我想要的解决方案是,对于
M(:,i)
的每一列,值小于
N(i)


使用
arrayfun
将比较应用于每个列和索引对的可能的两行解决方案:

T = arrayfun(@(jj)M(:,jj) < N(jj), 1:numel(N), 'UniformOutput', false);
result = cat(2,T{:});
T=arrayfun(@(jj)M(:,jj)

编辑:当然,bsxfun解决方案更高效。

它是
bsxfun
的标准用例:

O = bsxfun(@lt, M, N)

这里,
@lt
正在调用“小于”函数,也就是说,
bsxfun
的函数句柄在处理关系操作时尤其有效。这真的是最好的案例之一。我学到的不仅仅是问题的答案,谢谢!
O = bsxfun(@lt, M, N)
O = zeros(size(M));
for row = 1:size(M,1)
    O(row,:) = M(row,:) < N;
end
O = M < repmat(N, size(M,1), 1);