gpt4 book ai didi

matlab - 了解 Matlab 中的 accumarray

转载 作者:太空宇宙 更新时间:2023-11-03 20:02:16 25 4
gpt4 key购买 nike

我需要了解 accumarray 才能编写我真正需要的代码。

我试着去理解http://www.mathworks.co.kr/kr/help/matlab/ref/accumarray.html

大多数例子都很清楚。

但是,在示例2的第一个示例中,我认为

B的第(1,2)个元素应该是1

因为

(1,2) = 1st, 2nd of subs
1st, 2nd of vals = 101, 102
sum(diff([101,102]))=1

此外,在示例 2 的第二个示例中,我认为

B1的第(1,2)个元素应该是2而不是-2

因为

(1,2) = 1st, 3rd of subs
1st, 3rd of vals = 101, 103
sum(diff([101,103]))=2

我也觉得

B1的第(4,1)个元素应该是1而不是-1

因为

(4,1) = 5,6th of subs
5,6th of vals = 105,106
sum(diff([105,106]))=1

我错过了什么?

请更正,我需要深入了解accumarray才能编写自己的代码。

最佳答案

我认为意外的值是因为您希望这些值以与相关索引出现在 subs 中相同的顺序传递给匿名函数。

但是,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 ( 1 2; 1 2; ) 的开头可能导致 102 101 或 101 102 被传递给匿名函数(因为文档说 fun 不应该依赖于值的顺序。

sum(diff([102 101])) 为-1,即示例中写入元素 1,2 的值

val = 101:106;
subs=[1 2; 1 2; 3 1; 4 1; 4 4; 4 1];
B = accumarray(subs,val,[],@(x)sum(diff(x)))

B =

0 -1 0 0
0 0 0 0
0 0 0 0
2 0 0 0

当 diff 的结果显然取决于传递给它的值的顺序时,我不确定为什么 Mathworks 会选择在示例中使用 diff 函数。

看起来这种输入值排序是其他输出值与您的预期不同的原因。

关于matlab - 了解 Matlab 中的 accumarray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19721662/

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