我试图根据向量M(:,i)中相同的索引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)
     1     1     0     0
     0     0     0     1
     1     0     1     0发布于 2015-11-11 08:01:31
这是bsxfun的标准用例
O = bsxfun(@lt, M, N)这里,@lt调用“小于”函数,即它是<运算符的函数句柄。然后,bsxfun将沿着其单例维度“展开”N,方法是将函数@lt应用于M的每一行和整个N。
请注意,您可以很容易地使用for-loop实现相同的目标:
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);但是在MATLAB中,bsxfun通常是最有效的。
发布于 2015-11-11 07:55:22
使用arrayfun对每个列和索引对应用比较的可能的两行解决方案:
T = arrayfun(@(jj)M(:,jj) < N(jj), 1:numel(N), 'UniformOutput', false);
result = cat(2,T{:});编辑:当然,bsxfun解决方案效率要高得多。
https://stackoverflow.com/questions/33646167
复制相似问题