首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在matlab中用异步时间戳对齐矢量?

如何在matlab中用异步时间戳对齐矢量?
EN

Stack Overflow用户
提问于 2016-03-23 19:27:46
回答 2查看 336关注 0票数 0

我想用不同的时间戳对齐和计数向量,以计数相应的回收箱。

假设我有来自N的3个矩阵,边=组数在下面的结构中。第一行代表边缘,所以是垃圾桶。第二行表示值。我想把所有的值和在同一个垃圾桶里。

代码语言:javascript
复制
A = [0 1 2 3 4 5;
     5 5 6 7 8 5]

B = [1 2 3 4 5 6;
     2 5 7 8 5 4]

C = [2 3 4 5 6 7 8;
     1 2 6 7 4 3 2]

现在我想把所有相同的箱子加起来。我的最后结果应该是:

代码语言:javascript
复制
result = [0 1 2 3 4 5 6 7 8;
          5 7 12 16 ...]

我可以循环所有的数字,但我想让它快点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-23 19:41:55

您可以使用累加阵列

代码语言:javascript
复制
H = [A B C].';   %//' Concatenate the histograms and make them column vectors

V = [unique(H(:,1)) accumarray(H(:,1)+1, H(:,2))].';   %//' Find unique values and accumulate

V =

    0    1    2    3    4    5    6    7    8
    5    7   12   16   22   17    8    3    2

注意:H(:,1)+1是为了迫使bin值为正,否则MATLAB会抱怨。我们仍然在输出V中使用实际的回收箱。为了避免这种情况,正如@Daniel在评论中所说的那样,使用unique (请参阅:https://stackoverflow.com/a/27783568/2732801):

代码语言:javascript
复制
H = [A B C].';  %//' stupid syntax highlighting :/
[U, ~, IU] = unique(H(:,1));
V = [U accumarray(IU, H(:,2))].';   
票数 4
EN

Stack Overflow用户

发布于 2016-03-23 19:40:52

如果您只使用3个变量(如您已经展示的那样),那么在循环它时可能不会有任何性能方面的影响。

但是,如果您真的不喜欢循环的想法,那么您可以使用arrayfun

代码语言:javascript
复制
rng = 0:8;
output = arrayfun(@(x)sum([A(2,A(1,:) == x), B(2,B(1,:) == x), C(2,C(1,:) == x)]), rng);

output = cat(1, rng, output);

    output =

        0     1     2     3     4     5     6     7     8
        5     7    12    16    22    17     8     3     2

这对于特别大的ABC变量是有益的,因为没有数据的复制。

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

https://stackoverflow.com/questions/36187052

复制
相关文章

相似问题

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