1. ホーム
  2. マットラボ

[解決済み] インデックス式の最後に表示されること

2022-03-12 08:09:46

質問

ベクターがあります CD1 (120×1)に分割し CD1 を6つに分割しています。例えば、最初の部分は、1行目から20行目まで抽出された CD1 CD1 の 21 行目から 40 行目までが 2 番目の部分、といった具合に抽出される。の絶対値の平均を計算する必要がある。 データの二次差分 .

for PartNo = 1:6   

    % extract data                
    Y(PartNo) = CD1(1 + 20*(PartNo-1):20*(PartNo),:); 

    % find the second difference  
    Z(PartNo) = Y(PartNo)(3:end) - Y(PartNo)(1:end-2);  

    % mean of absolute value
    MEAN_ABS_2ND_DIFF_RESULT(PartNo) = mean(abs(Z));    

end

しかし、上記のコマンドでは、エラーが発生します。

()-indexing must appear last in an index expression for Line:2

何かコードを変更して、私が望むようにするためのアイデアはありますか?

解決方法は?

このエラーは、次のような場合によく発生します。 Y はセル配列です。セル配列の場合

Y{1}(1:3) 

は合法です。中括弧( {} を意味します。 データ抽出 ということは、あなたは 抽出 に格納されている配列を参照し、その配列の 1 から 3 までの要素を参照します。

表記方法

Y(1)(1:3)

は、データを抽出しない点が異なりますが、その分 参照先 は、セルの位置1です。つまり、最初の部分( Y(1) ) が返されます。 セル -配列で、あなたの場合、1つの配列を含んでいます。したがって、以前のように通常の配列に直接アクセスすることはできません。

Matlabの悪名高い制限として、間接参照や二重参照ができないことが挙げられますが、これは事実上あなたがここで行っていることです。

そのため、エラーになります。

さて、解決に向けて。通常の中括弧をいくつか中括弧に置き換えることで、うまくいくと思います。

Y{PartNo} = CD1(1+20*(PartNo-1):20*PartNo,:);   % extract data
Z{PartNo} = Y{PartNo}(3:end)-Y{PartNo}(1:end-2);  % find the second difference
MEAN_ABS_2ND_DIFF_RESULT{PartNo} = mean(abs(Z{PartNo}));  % mean of absolute value