左辺のサイズが 100x1 で右辺のサイズが 0x1 であるため、代入を実行できません。

20 次查看(过去 30 天)
matsuda.
matsuda. 2023-5-24
评论: matsuda. 2023-5-25
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

回答(1 个)

Atsushi Ueno
Atsushi Ueno 2023-5-24
>解決方法を教えてください
まず原因を調べる必要があります。原因が判ればインデックス範囲の修正等で解決出来ると思います。
【あやしい所】下記の (開始値:増分:終了値) の関係が不正で [] (空ベクトル)になっていませんか?
round(A_m(s,1,n,a): A_m(s,3,n,a)/100:A_m(s,2,n,a),0)
  • (終了値 - 開始値)と増分の符号が逆だと、空の列ベクトル(サイズ 0x1)になります
  • 増分がゼロだと空ベクトルになります(下記で動作確認しました)
x = zeros(100,100);
x(1:0:100,1) % 増分がゼロになるとx([],1)、即ち 0x1 空の列ベクトルが出力される
ans = 0×1 empty double column vector
【その他考えられる原因】
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)});
Unrecognized function or variable 'put_ment'.
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関数で得られたデータサイズを記録してみる
  1 个评论
matsuda.
matsuda. 2023-5-25
ご回答ありがとうございます。
増分が0になっていることが原因だと思い、値を変えてみたのですが、a=1:1であるためそれ以下(0など)に設定すると
「位置 2 のインデックスが無効です。配列インデックスは正の整数または
logical 値でなければなりません。」
とエラーが出てしまいます。
インデックス範囲の修正について教えて頂きたいです。
よろしくお願いいたします。

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

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

Start Hunting!