首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于向量相同索引的列的条件

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

Stack Overflow用户
提问于 2015-11-11 07:46:46
回答 2查看 47关注 0票数 4

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

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

代码语言:javascript
运行
复制
M =

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

N =

     4     0    90     7

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

代码语言:javascript
运行
复制
     1     1     0     0
     0     0     0     1
     1     0     1     0
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-11 08:01:31

这是bsxfun的标准用例

代码语言:javascript
运行
复制
O = bsxfun(@lt, M, N)

这里,@lt调用“小于”函数,即它是<运算符的函数句柄。然后,bsxfun将沿着其单例维度“展开”N,方法是将函数@lt应用于M的每一行和整个N

请注意,您可以很容易地使用for-loop实现相同的目标:

代码语言:javascript
运行
复制
O = zeros(size(M));
for row = 1:size(M,1)
    O(row,:) = M(row,:) < N;
end

或者使用repmat

代码语言:javascript
运行
复制
O = M < repmat(N, size(M,1), 1);

但是在MATLAB中,bsxfun通常是最有效的。

票数 5
EN

Stack Overflow用户

发布于 2015-11-11 07:55:22

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

代码语言:javascript
运行
复制
T = arrayfun(@(jj)M(:,jj) < N(jj), 1:numel(N), 'UniformOutput', false);
result = cat(2,T{:});

编辑:当然,bsxfun解决方案效率要高得多。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33646167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档