gpt4 book ai didi

MatLab AccumArray 意外改变顺序

转载 作者:行者123 更新时间:2023-12-03 09:27:20 25 4
gpt4 key购买 nike

只要我理解了accumarray,它的意思就是“输出第n行:1)在sub中找到n。2)如果n在sub中的m1,m2,m3个元素中,3)将函数应用于m1,m2,m3 val 4) 的第一个元素,即输出的第 n 行”

我有什么地方说错了吗?

我运行了以下代码。

A = [2 10 13 ; 1 11 14; 1 12 10]
[U,ix,iu]= unique(A(:,1))
vals = reshape(A(:, 2:end).', [], 1)
subs = reshape(iu(:, ones(size(A, 2)-1,1)).', [], 1)
r2 = accumarray(subs, vals', [], @(x){x'})
r2{1}
r2{2}

A=

 2    10    13
1 11 14
1 12 10

你=

 1
2

ix=

 3
1

iu=

 2
1
1

值=

10
13
11
14
12
10

潜艇=

 2
2
1
1
1
1

r2=

[1x4 double]
[1x2 double]

答=

12    11    14    10

答=

13    10

==========================

但我期望 r{1} = 11 14 12 10r{2} = 10 13

为什么accumarray突然改变了顺序?

怎样才能得到预期的结果?

最佳答案

documentation of accumarray说:

Note If the subscripts in subs are not sorted, fun should not depend on the order of the values in its input data.

并且您的subs未排序(至少未按升序排列)。如果您重写代码,以便对 subs 进行排序,并且 vals 也相应地重新排列,您将获得所需的结果:

A = [2 10 13 ; 1 11 14; 1 12 10]
[U,ix,iu]= unique(A(:,1))
vals = reshape(A(:, 2:end).', [], 1)
subs = reshape(iu(:, ones(size(A, 2)-1,1)).', [], 1)
[subs_sorted, I] = sort(subs);
r2 = accumarray(subs_sorted, vals(I)', [], @(x){x'})
r2{1}
r2{2}

运行此代码将返回:

ans =
11 14 12 10
ans =
10 13

关于MatLab AccumArray 意外改变顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17774015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com