- (終了値 - 開始値)と増分の符号が逆だと、空の列ベクトル(サイズ 0x1)になります
- 増分がゼロだと空ベクトルになります(下記で動作確認しました)
左辺のサイズが 100x1 で右辺のサイズが 0x1 であるため、代入を実行できません。
22 views (last 30 days)
Show older comments
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 Comments
Answers (1)
Atsushi Ueno
on 24 May 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関数で得られたデータサイズを記録してみる
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!