![](/img/trans.png)
[英]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.