グラフを表示すると3つのピークを持つsin(x)+1のグラフに似ています。私は各ピークの下で統合し、3つの異なる領域を取得したい。私はピークの座標位置を知らない、私は波長を知っていると仮定することはできません。だから私は3つのピークを見つけ、3つの対応するベクトルにデータを分離する必要があります。どんな助けでも大歓迎です。データセットをピークに基づいて3つの異なるベクトルに分割する方法
0
A
答えて
0
findpeaks
機能を使用して、目的を達成できます。以下の例を見てみましょう:
我々は二つのベクトルx
とデータのy
を生成します。
x = linspace(0, 5*pi); % x data.
y = sin(x) + 1; % y data.
その後、我々は我々のデータセットのピークを見つけるとそのインデックス(locs
)を取得するためにfindpeaks
を使用します。
>> [~, locs] = findpeaks(y)
locs =
11 51 90
この関数は、座標が[x(11), y(11)]
,[x(51), y(51)]
および[x(90), y(90)]
の3つのピークを検出しました。私たちは、私たちのデータセットを非常に分けることができます
>> findpeaks(y)
:
出力引数なしでfindpeaks
を呼び出すことによって、私たちはしばしば視覚的に確認するのに便利です重ねピーク値を持つデータのプロットを得ることができます簡単に次の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]
をだから我々が正常に当社のデータセットを分割しています。各セルには、元のデータセットのサブセットが含まれています。
今、私たちは、各サブセットの数値積分を見つけるためにfor
ループ内trapz
を使用することができます。
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. SSRS - 2つの異なるデータセットの基準に基づいてフィールドを表示
- 2. インデックスに基づいてPythonでリストを分割する方法
- 3. IDに基づいてデータを分割する方法は?
- 4. 行数に基づいてs3オブジェクトを分割する方法
- 5. 異なるデータセットに基づくデータセットを作成する
- 6. Excelのスプレッドシートを列ヘッダーに基づいて異なるワークシートに分割
- 7. 値に基づいて2つに分割する配列
- 8. 連続した一意の値に基づいてベクトルをリストに分割する方法
- 9. 条件に基づいて3つの異なるデータフレームをマージする
- 10. いくつかの基準に基づいてstd :: vectorを分割する
- 11. パンダ:頻度分布に基づいてパワーロウに続くデータフレームの列を2つに分割する方法は?
- 12. Rails 3ログインステータスに基づいて2つの異なるホームページを表示する最も良い方法
- 13. 2つの外部キーに基づいて異なるプライマリキーを持つ方法
- 14. 内容に基づいて3つの異なるファイルに出力をリダイレクト
- 15. 条件に基づいて同じUITableViewに異なるデータセットを表示する
- 16. pandasのキーワードに基づいて2つの異なる列に文字列を分割しますか?
- 17. 日付範囲に基づいてデータセットをマージする方法
- 18. Symfony2/3のユーザ役割に基づいてフォームフィールドをカスタマイズする方法は?
- 19. Javaを使ってregexに基づいてファイルを分割する方法
- 20. 異なるパラメータに基づいて異なるモックを返す方法は?
- 21. 日付フィールドに基づいてShardにSolrコレクションを分割する方法
- 22. Ruby on Rails 3 - Deviseに基づいて2つの異なるフォームを作成する方法
- 23. csvファイルのコンテンツをPythonコードの 'dot'に基づいて分割する方法
- 24. ベクトルの列を2つの列に分割する方法は?
- 25. 特定の値に基づいて配列を分割する方法は?
- 26. 年月のフレームに基づいてデータフレームを分割する方法
- 27. 分割テキストコンマに基づいて
- 28. 異なるデータセットの日付値に基づいて色を変更します
- 29. パターンに基づいて1つのファイルを複数のファイルに分割する
- 30. 間隔に基づいて2つのデータセットをマージする
あなたの究極の目標が何であるかを明確にすることはできますか? *「各ピークの下で統合し、3つの異なる領域を得る」*または「3つの対応するベクトルにデータを分離する」*? – codeaviator
私の目標は、3つの異なる領域を得ることです。データセットは当初は1つの巨大なベクトルに入っていて、3つの異なるベクトルに分けてtrapzを使いたいと思っていました。 – Samar