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

14 vues (au cours des 30 derniers jours)
matsuda.
matsuda. le 24 Mai 2023
Commenté : matsuda. le 25 Mai 2023
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

Réponses (1)

Atsushi Ueno
Atsushi Ueno le 24 Mai 2023
>解決方法を教えてください
まず原因を調べる必要があります。原因が判ればインデックス範囲の修正等で解決出来ると思います。
【あやしい所】下記の (開始値:増分:終了値) の関係が不正で [] (空ベクトル)になっていませんか?
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 commentaire
matsuda.
matsuda. le 25 Mai 2023
ご回答ありがとうございます。
増分が0になっていることが原因だと思い、値を変えてみたのですが、a=1:1であるためそれ以下(0など)に設定すると
「位置 2 のインデックスが無効です。配列インデックスは正の整数または
logical 値でなければなりません。」
とエラーが出てしまいます。
インデックス範囲の修正について教えて頂きたいです。
よろしくお願いいたします。

Connectez-vous pour commenter.

Catégories

En savoir plus sur 行列および配列 dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!