[英]I am trying to extract the rows with the same x values from two different files in matlab, how can I do it?
[英]How do I add up two scatter points with the same values of x but different values of 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
,因此在绘制stem
图时不会重复X
unique
也具有对x
值进行排序的行为。 这样做x(:)
和y(:)
是为了使您可以独立地将输入数据作为行向量或列向量。 accumarray
仅接受列向量(或矩阵,但我们不会去那里),因此执行x(:)
和y(:)
可确保两个输入均为列向量。
我们得到:
上面的代码假定x
为整数,并且从1开始。如果不是,则使用unique
的第三个输出为每个数字分配一个唯一的ID,然后通过accumarray
运行它。 完成后,像accumarray
一样使用accumarray
的输出:
[xu,~,id] = unique(x);
Z = accumarray(id, y(:), [], @sum);
stem(xu, Z);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.