6

ベクトルCD1(120 行 1 列) があり、CD16 つの部分に分割します。たとえば、最初の部分は の行 1 から行 20 までCD1が抽出され、2 番目の部分は CD1 の行 21 から行 40 までが抽出されます。各部分について、データ

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

私が望むようにコードを変更するアイデアはありますか?

4

3 に答える 3

9

このエラーはY、 がセル配列の場合によく発生します。cell 配列の場合、

Y{1}(1:3) 

合法です。中括弧 ( {}) はデータの抽出を意味するため、セル配列の 1 番目の位置に格納されている配列を抽出し、その配列の要素 1 ~ 3 を参照していることを意味します。

表記

Y(1)(1:3)

データを抽出しないという点で異なりますが、セルの位置 1 を参照します。これは、最初の部分 ( ) がセルY(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
于 2012-11-29T14:57:39.327 に答える
3

これはmatlabでは有効なステートメントではありません。

Y(PartNo)(3:end)

Y2次元にして、このインデックスを使用する必要があります

Y(PartNo, 3:end)

または、表示したようなループを使用する場合は、ベクトル部分を抽出して直接使用します

for PartNo = 1:6   

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

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

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

また、CD1はベクトルであるため、2番目の次元にインデックスを付ける必要はありません。落とす:

Y = CD1(1 + 20*(PartNo-1):20*(PartNo));

最後に、ループは必要ありません。列がパーツであるサイズの2次元配列にベクトルをreshape設定し、結果の行列を直接操作できます。CD1Y20x6

Y = reshape(CD1, 20, 6);
Z = Y(3:end,:)-Y(1:end-1,:);
MEAN_ABS_2ND_DIFF_RESULT = mean(abs(Z));
于 2012-11-29T15:35:48.877 に答える
3

別のアプローチを提案するかもしれません

Y = reshape(CD1, 20, 6);
Z = diff(y(1:2:end,:));
MEAN_ABS_2ND_DIFF_RESULT = mean(abs(Z));
于 2012-11-29T15:04:30.517 に答える