”位置 1 のインデックスが配列範囲を超えています” というエラー表示の原因

環境:windows10, MATLAB2021a
csp_dataset_train.matはサイズが大きすぎるため、driveにて共有させていただきます。
load('csp_dataset_train.mat')
% 定義
flt = @(f)(f>7&f<30).*(1-cos((f-(7+30)/2)/(7-30)*pi*4)); %バンドパスフィルタ
EEG = single(cnt);
Fs = 250; % サンプリング周波数
mrk = sparse(1,pos,(y+3)/2); % エポック設定
wnd0 = [0.5 3.5]; % 時間窓の設定
nof = 3; % 特徴ベクトル
n = 200; % 時間フィルタ
[t,c] = size(EEG);
FLT = real(ifft(fft(EEG).*repmat(flt(Fs*(0:t-1)/t)',1,c)));
wnd = round(Fs*wnd0(1)):round(Fs*wnd0(2));
for k=1:2
% エラー箇所
EPO{k} = FLT(repmat(find(mrk == k),length(wnd),1) + repmat(wnd',1,nnz(mrk == k)),:);
end
csp_dataset_train.matの内容
cnt : 96735 × 25 double
fs : 250
pos : 1×24 double
y : 1×24 double
上記のファイルから、データを読み込んで計算するのですが、コード内のfor文においてエラーが出ます。エラー内容は以下の通りです。
位置 1 のインデックスが配列範囲を超えています (96735 を超えてはならない)
エラー: errorcheck (18)
EPO{k} = FLT(repmat(find(mrk == k),length(wnd),1) + repmat(wnd',1,nnz(mrk == k)),:);
よろしくお願いします。

3 Comments

Atsushi Ueno
Atsushi Ueno on 15 Dec 2021
win10のMATLAB R2017aで開くと下記エラーの為開けず、エラーの出る状況を再現出来ませんでした。
エラー: load
MAT ファイル csp_dataset_test.mat を読み込むことができません。ファイルが破損している可能性があります。
FLT (96735 × 25 double) の「位置1のインデックスが配列範囲を超えています (96735 を超えてはならない)」ですから、下記の計算結果が96735 を超える時のmrkがどのような値になっているか調べれば原因を特定できると思います。データの欠損などによりNaNが紛れ込む可能性も考えましたがfind関数やnnz関数ではその様な事にならないようです。
% repmat(find(mrk == k),length(wnd),1) + repmat(wnd',1,nnz(mrk == k))
  • 上記の値が96735 を超えた事実がある事は間違いない
  • mrk==kの合致数は最大24個だがおそらく常に1個
  • なのでwnd'(125~875の1×751 double)にmrk==kがヒットしたインデックス(1~24)が加算される(最大値は899)
  • kの範囲を1:2より増やしても上記は同様、どう考えても96735どころか899を超えない
下記の様に計算が通る適当な値を入れると、エラーはでません。
flt = @(f)(f>7&f<30).*(1-cos((f-(7+30)/2)/(7-30)*pi*4));
EEG = single(ones(96735,25));
mrk = sparse(1,1:24,((-1:3/24:1.9)+3)/2);
FLT = real(ifft(fft(EEG).*repmat(flt(250*(0:96735-1)/96735)',1,25)));
wnd = round(250*0.5):round(250*3.5)
for k=1:2
EPO{k} = FLT(repmat(find(mrk == k),length(wnd),1) + repmat(wnd',1,nnz(mrk == k)),:)
end
zipに圧縮すればここのライブスクリプトにアップロードして実行できました。
しかし、やはりファイルを開く事が出来ません。
また、文章中には"csp_dataset_train.mat”、ダウンロード可能なファイル名は"csp_dataset_test.mat”と異なる事に気付きましたが、意図したデータファイルですか?
unzip('csp_dataset_test.zip');
load('csp_dataset_test.mat');
Error using load
Unable to read MAT-file /users/mss.system.ZNs003/csp_dataset_test.mat. File might be corrupt.
Tatsuya Onishi
Tatsuya Onishi on 22 Dec 2021
おっしゃる通りmrkに原因がありました。
mrkファイル内の数値に問題があり、それ修正することで実行できました!助言していただき、ありがとうございました!!

Sign in to comment.

Answers (0)

Products

Release

R2021a

Tags

Asked:

on 15 Dec 2021

Commented:

on 22 Dec 2021

Community Treasure Hunt

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

Start Hunting!