Effacer les filtres
Effacer les filtres

範囲を指定して最頻値

7 vues (au cours des 30 derniers jours)
Ochi Kai
Ochi Kai le 7 Sep 2022
Commenté : Ochi Kai le 7 Sep 2022
例えばA=[1,1,1,1,5, 2,2,2,2,3, 4,4,1]といった13×1の変数があるとします。
これらを上から順に5行毎に分けその最頻値を取りたいです。今回の場合はB=[1, 2, 4]といった感じで、最後は割り切れないがそのまま出力したいと思っています。
mode関数がよいようなのですが、以下のようにプログラムして上手くいきません。ご教授いただけると幸いです。よろしくお願いいたします。
for i = 1:length(A):5
k=i+4;
l=mode(A(i:k,:),2);
end

Réponse acceptée

Hernia Baby
Hernia Baby le 7 Sep 2022
まずは準備します。
A = [1;1;1;1;5;2;2;2;2;3;4;4;1];
sz_A = size(A)
sz_A = 1×2
13 1
ここがミソになります。
remで余りを算出し、それを割る数(ここでは5)から引くと足りない数が出ます。
その分だけNaNを埋め込みます。そしてreshapeで5行×n列の行列に変換します。
num = 5;
B = [A;nan(num - rem(sz_A(1),num),1)];
B_re = reshape(B,5,[])
B_re = 5×3
1 2 4 1 2 4 1 2 1 1 2 NaN 5 3 NaN
modeはNaNを無視するのでそのまま使えます。
MODEs = mode(B_re)
MODEs = 1×3
1 2 4
  6 commentaires
Hernia Baby
Hernia Baby le 7 Sep 2022
すみません、一部間違えていました…
以下のコードになります
clear,clc;
A = readmatrix('saihin.csv');
Y = length(A)/50;
Y = fix(Y);
Y = Y + 1;
X = zeros(Y,1);
m = 1;
for ii = 1:50:length(A)
k = ii + 49;
if k > length(A)
X(m,1)=mode(A(ii:length(A),1));
else
X(m,1)=mode(A(ii:k,1));
end
m = m + 1;
end
X'
ans = 1×100
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Ochi Kai
Ochi Kai le 7 Sep 2022
解決いたしました!いくつかの質問にも答えていただいて本当にありがとうございます。

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Tags

Produits


Version

R2022a

Community Treasure Hunt

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

Start Hunting!