在干图上,如何添加具有相同值x
但具有不同y
值的点?如何将两个具有相同x值但不同y值的散点相加?
例如,假设下面的代码:
x = [1 2 3 6 6 4 5];
y = [3 6 1 8 9 4 2];
stem(x,y);
如果您绘制x
和y
,这将是输出:
我想加起来(6,8)
和(6,9)
所以它就变成了(6,17)
,就像图片显示的一样。
我该如何做到这一点?
在干图上,如何添加具有相同值x
但具有不同y
值的点?如何将两个具有相同x值但不同y值的散点相加?
例如,假设下面的代码:
x = [1 2 3 6 6 4 5];
y = [3 6 1 8 9 4 2];
stem(x,y);
如果您绘制x
和y
,这将是输出:
我想加起来(6,8)
和(6,9)
所以它就变成了(6,17)
,就像图片显示的一样。
我该如何做到这一点?
使用accumarray
与x
和y
这样你就可以垃圾桶或类似组一起条目共享相同x
。一旦这些值分组后,您可以将共享同一个分栏的所有值相加在一起。因此,我们看到对于x = 6
,我们有y = 8
和y = 9
。 accumarray
允许您将多个共享相同x
的y
值组合在一起。一旦将这些值分组后,您就可以对同一组中的所有值应用函数,以便为每个组生成最终输出。在我们的例子中,我们要总结他们,所以我们需要使用sum
功能:
x = [1 2 3 6 6 4 5];
y = [3 6 1 8 9 4 2];
Z = accumarray(x(:), y(:), [], @sum);
stem(unique(x), Z);
xlim([0 7]);
我们对X
使用unique
,使我们有没有重复的X
绘制stem
情节时。 unique
也有排序您的x
值的行为。做x(:)
和y(:)
这样就可以让你的输入数据独立地作为行或列向量。 accumarray
只接受列向量(或矩阵,但我们不会去那里),所以这样做x(:)
和y(:)
确保两个输入都是列向量。
我们得到:
上面的代码假定x
是整数,并在1开始。如果没有,则使用的unique
第三输出到每个号码分配一个唯一的ID,然后通过accumarray
运行。完成后,请使用accumarray
之类的输出:
[xu,~,id] = unique(x);
Z = accumarray(id, y(:), [], @sum);
stem(xu, Z);
非常感谢你,先生:) – matlabnewbie 2015-02-06 07:42:56
嗨,你可以在java的netbean呢? – matlabnewbie 2015-02-07 10:37:27
您的输入数据与您的图形不匹配。特别是'X'和'Y'有不同的长度。你不能使用具有不同长度向量的'stem'。 – rayryeng 2015-02-06 06:48:43
对不起,我已经编辑y – matlabnewbie 2015-02-06 06:52:55