필터 지우기
필터 지우기

範囲を指定して最頻値

조회 수: 7 (최근 30일)
Ochi Kai
Ochi Kai 2022년 9월 7일
댓글: Ochi Kai 2022년 9월 7일
例えば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

채택된 답변

Hernia Baby
Hernia Baby 2022년 9월 7일
まずは準備します。
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
Hernia Baby
Hernia Baby 2022년 9월 7일
すみません、一部間違えていました…
以下のコードになります
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 2022년 9월 7일
解決いたしました!いくつかの質問にも答えていただいて本当にありがとうございます。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!