現在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일

1 개 추천

質問の回答
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개)

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

릴리스

R2019b

질문:

2021년 3월 30일

답변:

2021년 3월 31일

Community Treasure Hunt

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

Start Hunting!