- (終了値 - 開始値)と増分の符号が逆だと、空の列ベクトル(サイズ 0x1)になります
- 増分がゼロだと空ベクトルになります(下記で動作確認しました)
左辺のサイズが 100x1 で右辺のサイズが 0x1 であるため、代入を実行できません。
22 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
post ( : , i ) = ・・・の行でエラーが出ましたが、右辺で0×1になっているというのが分かりません。
始めたばかりなので調べても分かりませんでした。解決方法を教えてください。
エラー:左辺のサイズが 100x1 で右辺のサイズが 0x1 であるため、代入を実行できません。
put_ment:struct 型の変数
A_m:double 型の変数
Post=zeros(100,490*5);
%%中略
n=0;
i=0;
for a=1:1
for b=1:3
for c=1:7
n=n+1;
for s=1:10
i=i+1;
Post(:,i)=getfield(put_ment, A{a,1}, B{b,1}, C{c,1}, {round(A_m(s,1,n,a): A_m(s,3,n,a)/100:A_m(s,2,n,a),0),(1:1)});
%%中略
end
end
end
end
0 Kommentare
Antworten (1)
Atsushi Ueno
am 24 Mai 2023
>解決方法を教えてください
まず原因を調べる必要があります。原因が判ればインデックス範囲の修正等で解決出来ると思います。
【あやしい所】下記の (開始値:増分:終了値) の関係が不正で [] (空ベクトル)になっていませんか?
round(A_m(s,1,n,a): A_m(s,3,n,a)/100:A_m(s,2,n,a),0)
x = zeros(100,100);
x(1:0:100,1) % 増分がゼロになるとx([],1)、即ち 0x1 空の列ベクトルが出力される
【その他考えられる原因】
Post()へ格納するput_mentの各フィールドのサイズは 100x1 になる事が期待されている様ですが、どこかにサイズが 0x1 のフィールド (空になっている箇所) がある様です。その場合、空ベクトルでしかアクセスしない限り問題の様なエラーは発生しないはずなので、あったとしても上記の問題と重複していると思います。
temp = getfield(put_ment, A{a,1}, B{b,1}, C{c,1},{round(A_m(s,1,n,a): A_m(s,3,n,a)/100:A_m(s,2,n,a),0),(1:1)});
if ~all(size(temp) == [100 1]) % getfield関数で得られたデータサイズが[100 1]ではない場合
disp(['data size is not [100 1] @ put_ment.' A{a,1} '.' B{b,1} ',' C{c,1} '{' num2str(round(A_m(s,1,n,a): A_m(s,3,n,a)/100:A_m(s,2,n,a),0)) ',1}']);
end
Post(1:2,i)=size(temp)'; % Postにgetfield関数で得られたデータサイズを記録してみる
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!