索引必须出现在索引表达式的最后

Ton*_*YEe 5 indexing matlab loops for-loop

我有一个矢量CD1(120乘1),我CD1分成6个部分.例如,第一部分从第1行提取到第20行CD1,第二部分从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
Run Code Online (Sandbox Code Playgroud)

但是,上面的命令会产生错误:

()-indexing must appear last in an index expression for Line:2
Run Code Online (Sandbox Code Playgroud)

任何改变代码的想法让它做我想做的事情?

Rod*_*uis 8

Y是单元阵列时经常遇到此错误.对于细胞阵列,

Y{1}(1:3) 
Run Code Online (Sandbox Code Playgroud)

是合法的.Curly braces({})表示数据提取,因此这意味着您要提取存储在单元格数组中位置1的数组,然后引用该数组的元素1到3.

符号

Y(1)(1:3)
Run Code Online (Sandbox Code Playgroud)

不同之处在于它不提取数据,但它引用了单元格的位置1.这意味着第一个part(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
Run Code Online (Sandbox Code Playgroud)