首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >矩阵列的比较与布尔输出

矩阵列的比较与布尔输出
EN

Stack Overflow用户
提问于 2014-10-27 03:09:49
回答 2查看 57关注 0票数 0

我检查了其他问题。我没找到答案。我有一个n*2大小的矩阵。我想比较第一列和第二列,基于哪一列更大,我想要为相应的索引分配0/1。假设我想要一个输出

代码语言:javascript
运行
复制
a = 1 2
    4 3
    7 8

我想要这样的输出

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

我做了这个:

代码语言:javascript
运行
复制
o1 = a(:,1) > a (:,2)
o2 = not(o1)
out = [o1, o2] 

这做了工作,但我相信有更好的方法来做这件事。需要对此提出建议。忘了提到,数据类型是浮动在矩阵中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-27 09:31:41

一种更通用的解决方案,可以处理两个以上列的矩阵:

代码语言:javascript
运行
复制
out = bsxfun(@eq, a, max(a,[],2));
票数 1
EN

Stack Overflow用户

发布于 2014-10-27 08:54:19

你做的很好。行的数量并不重要,重要的是每一行操作的复杂性。在评论之后,我认为您也可以通过避免复制和多次分配来获得一些时间:

代码语言:javascript
运行
复制
out = false(size(a)); out(:,1) = (a(:,1) > a(:,2)); out(:,2) = ~out(:,1);

在Matlab中预先分配是很好的做法,并且通常避免在任何编程语言中复制。通过使用不同的操作来进一步优化运行时是毫无意义的。如果您确实需要速度,您可以使用Mex来节省一次遍历行(第二次赋值),这实际上是十几行C行,尽管您必须注意如何编写循环(天真的方式会导致每次迭代中的缓存丢失)。

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

https://stackoverflow.com/questions/26580651

复制
相关文章

相似问题

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