discretizeの使い方について
2 views (last 30 days)
Show older comments
shoki kobayashi
on 30 Mar 2021
Answered: Hernia Baby
on 31 Mar 2021
現在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 Comment
Shunichi Kusano
on 31 Mar 2021
「その時多次元の各列を1つのデータだと思ってbinにグループ化したい」の部分が具体的にどのような処理になるか、教えていただけますでしょうか。各列に対して1つの出力が出るようになるんだなというのは理解できるのですが、具体的に3311232111の出力が導き出される過程が掴みきれませんでした。
Accepted Answer
Hernia Baby
on 31 Mar 2021
質問の回答
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 Comments
More Answers (0)
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!