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);