discretizeの使い方について

13 ビュー (過去 30 日間)
shoki kobayashi
shoki kobayashi 2021 年 3 月 30 日
回答済み: Hernia Baby 2021 年 3 月 31 日
現在discretizeを用いてbinにグループ化使用としています。
その時多次元の各列を1つのデータだと思ってbinにグループ化したいです。
ドキュメンテーションの方法をそのまま用いると
>> a = rand(10):
>> [y, e] = discretize(a,3)
y =
3 1 2 2 2 1 2 3 1 1
3 3 1 1 1 2 1 1 3 1
1 3 3 1 2 2 2 3 2 2
3 2 3 1 2 1 2 1 2 2
2 3 2 1 1 1 3 3 3 3
1 1 2 3 2 2 3 1 1 1
1 2 2 2 2 3 2 1 2 2
2 3 1 1 2 1 1 1 2 2
3 2 2 3 2 2 1 2 1 1
3 3 1 1 2 1 1 2 2 1
e =
0 0.4000 0.8000 1.2000
となります。
これを
y =
3
3
1
1
2
3
2
1
1
1
のようにしたいです。
どのようにすればよいでしょうか。
  1 件のコメント
Shunichi Kusano
Shunichi Kusano 2021 年 3 月 31 日
「その時多次元の各列を1つのデータだと思ってbinにグループ化したい」の部分が具体的にどのような処理になるか、教えていただけますでしょうか。各列に対して1つの出力が出るようになるんだなというのは理解できるのですが、具体的に3311232111の出力が導き出される過程が掴みきれませんでした。

サインインしてコメントする。

採用された回答

Hernia Baby
Hernia Baby 2021 年 3 月 31 日
質問の回答
discretizeはあくまで数字をある閾値で分割してグループ分けするだけです。
次元を変えることはできないと思います。
たぶん解決案
おそらくdiscretize関数を使った後に、
それぞれの列ごとに変数を格納したいのだと思い解決案を以下に記します。
処理を行った後にcell型に格納することをお勧めします。
clear
a = rand(10);
[y, e] = discretize(a,3);
for i = 1:length(y(1,:))
bin{i} = y(:,i);
end
bin{1}
上記コードでは1列目だけを出力しています。
ans =
2
1
2
2
2
2
2
1
1
1
おまけ
ちなみにcell型にするとcellfun関数を用いて一括処理することも可能です。
ここでは各列のmaxを算出しています。
>> bin_max = cellfun(@max,bin)
bin_max =
2 3 3 3 3 3 3 2 3 3
cellfunはこちら

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMATLAB 入門 についてさらに検索

製品


リリース

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!