我检查了其他问题。我没找到答案。我有一个n*2大小的矩阵。我想比较第一列和第二列,基于哪一列更大,我想要为相应的索引分配0/1。假设我想要一个输出
a = 1 2
4 3
7 8我想要这样的输出
out = 0 1
1 0
0 1我做了这个:
o1 = a(:,1) > a (:,2)
o2 = not(o1)
out = [o1, o2] 这做了工作,但我相信有更好的方法来做这件事。需要对此提出建议。忘了提到,数据类型是浮动在矩阵中。
发布于 2014-10-27 09:31:41
一种更通用的解决方案,可以处理两个以上列的矩阵:
out = bsxfun(@eq, a, max(a,[],2));发布于 2014-10-27 08:54:19
你做的很好。行的数量并不重要,重要的是每一行操作的复杂性。在评论之后,我认为您也可以通过避免复制和多次分配来获得一些时间:
out = false(size(a)); out(:,1) = (a(:,1) > a(:,2)); out(:,2) = ~out(:,1);在Matlab中预先分配是很好的做法,并且通常避免在任何编程语言中复制。通过使用不同的操作来进一步优化运行时是毫无意义的。如果您确实需要速度,您可以使用Mex来节省一次遍历行(第二次赋值),这实际上是十几行C行,尽管您必须注意如何编写循环(天真的方式会导致每次迭代中的缓存丢失)。
https://stackoverflow.com/questions/26580651
复制相似问题