我有一個大型數據集,它在繪製時類似於具有三個峯值的sin(x)+1的圖形。我想在每個高峯下集成並獲得三個不同的區域。我不知道峯的座標位置,我不能假設我知道波長。所以我需要找到三個峯值並將數據分成三個相應的向量。任何幫助將不勝感激。如何根據峯值將數據集劃分爲三個不同的向量
0
A
回答
0
您可以使用findpeaks
功能完成您想要的功能。看看下面的例子:
我們產生兩個向量x
和數據的y
:
x = linspace(0, 5*pi); % x data.
y = sin(x) + 1; % y data.
然後我們使用findpeaks
找到我們的數據集的峯值和檢索其索引(locs
):
>> [~, locs] = findpeaks(y)
locs =
11 51 90
我們可以看到該函數已經找到3個座標爲:峯值爲[x(11), y(11)]
,[x(51), y(51)]
和[x(90), y(90)]
的峯。
通過調用findpeaks
沒有輸出參數,我們可以得到的數據與疊加峯值這往往是一個視覺驗證有用的一個情節:
>> findpeaks(y)
我們可以非常分散我們的數據集容易地與以下for
循環,並存儲不同的子集在一個cell array:
n = numel(locs);
for i = 1:n + 1
if i == 1
x_cell{i} = x(1:locs(i));
y_cell{i} = y(1:locs(i));
elseif i <= n
x_cell{i} = x(locs(i-1):locs(i));
y_cell{i} = y(locs(i-1):locs(i));
else
x_cell{i} = x(locs(i-1):end);
y_cell{i} = y(locs(i-1):end);
end
end
這將給我們:
K>> x_cell
x_cell =
1×4 cell array
[1×11 double] [1×41 double] [1×40 double] [1×11 double]
和
K>> y_cell
y_cell =
1×4 cell array
[1×11 double] [1×41 double] [1×40 double] [1×11 double]
因此,我們已經成功地把我們的數據集。每個單元格包含原始數據集的一個子集。
現在我們可以使用trapz
一個for
循環內找到數值積分每個子集:
k = numel(y_cell);
for i = 1:k
A(i) = trapz(x_cell{i}, y_cell{i});
end
這些結果如下:
>> A
A =
2.6004 6.4099 6.0931 2.6004
最後,我認爲這將是不錯的陰謀使用area
函數和for
循環的不同區域一起使用:
hold on;
for i = 1:k
area(x_cell{i}, y_cell{i}, 'FaceColor', i/k*[1, 1, 1]);
end
hold off; axis tight;
grid on; box on;
不同的區域是清晰可見的位置:
相關問題
- 1. 如何根據百分比劃分數據集?
- 2. 根據同一個向量中的值更改向量值
- 3. 如何在SAS中將數據集劃分爲兩部分
- 4. 根據屬性將矢量劃分爲更小的矢量
- 5. 如何根據列值選擇不同百分比的數據?
- 6. Srpy數據集如果根據不同數據集的值做出決策
- 7. 根據不同變量生成多個數據集
- 8. 在R中,如何根據多個分類變量將數據拆分爲多個子集的列表?
- 9. 如何根據Python中的列值將數據分組爲變量?
- 10. 將數據集劃分爲大小爲n的分箱matlab
- 11. 如何根據用戶輸入將數組劃分爲二維數據?
- 12. 如何根據連續的唯一值將向量拆分爲列表
- 13. 根據列的值將數據幀拆分爲兩個文件
- 14. 根據數據將一個主題分成不同的主題
- 15. 根據列將大型數據集拆分爲子集
- 16. 根據不同的數據集創建數據集
- 17. 如何根據Reporting Services中的參數值選擇不同的數據集
- 18. 將數據集劃分爲匹配和不匹配的數據表
- 19. 如何劃分SQL數據中的值
- 20. 將用戶數據庫分爲兩個不同的集合
- 21. 如何根據2個不同的列值將一行分成兩部分
- 22. 子集的數據集劃分爲多個datsets中的R
- 23. 將組劃分爲具有相同元素數量的子集
- 24. 如何將json數據拆分爲2個不同的數組?
- 25. 如何根據整數值將數組拆分爲子數組
- 26. Stata - 根據變量中的值分配不同的變量
- 27. 劃分不同數據幀的兩列
- 28. 爲什麼函數根據容量返回不同的值
- 29. 如何根據條件將值分配給數據框的列?
- 30. 如何根據條件將僱主分爲三列?
你能澄清什麼是你的最終目標是什麼? *「在每個峯下積分並得到三個不同的區域」*或*「將數據分成三個相應的矢量」*? – codeaviator
我的目標是獲得三個不同的領域。數據集最初在一個巨大的向量中,我想將它分成三個不同的向量並使用trapz。 – Samar