【问题标题】:Assigning values to matrices in cell-arrays - MATLAB为元胞数组中的矩阵赋值 - MATLAB
【发布时间】:2014-05-12 12:05:56
【问题描述】:

我正在尝试将值分配给矩阵,该矩阵是一个数组元素,同时通过循环。但是有人告诉我 Subscript indices must either be real positive integers or logicals. 但正如您从下面的脚本中看到的那样,在实际使用每个索引之前,我已经阅读了每个索引的输出,并且每个索引都是真正的正整数。

错误是由第一个循环语句fundMoments{1,i}((count-frame(j)+1), meanCol) = mean(fund(count-frame(j)+1:count));产生的-我已经单独运行了该行的左侧,并使用脚本中定义的输入,它正确地告诉我保存在矩阵中的值,在数组中, 为零。然而,完整的生产线没有运行。

任何想法我在这里出错了吗?

对于代码的某些上下文 - 我正在尝试计算移动平均值(但不仅是移动平均值,还有移动标准偏差等)。 frame 的值是考虑的移动时间窗口的长度。 funds 是一个 ~2500x8 双精度矩阵。

frame = [252 504 756];   % the time frame to be used for moving averages
funds = funds_ROR;   %matrix with the returns of all funds
meanCol = 1;
st_devCol = 2;
skewCol = 3;
kurtCol = 4;

%for f = 1:length(frame)
mean = zeros(length(funds) - frame(1), 1);
st_dev = zeros(length(funds) - frame(1), 1);
skew = zeros(length(funds) - frame(1), 1);
kurt = zeros(length(funds) - frame(1), 1);

vectLength = length(mean);    % all the four vectors must be of the same length, so we only need use one

fundMoments = {[mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt], [mean st_dev skew kurt]};

for i = 1:1:8
    fund = funds_ROR(:,i);


    for j = 1:length(frame)

        for count = frame(j):length(fund)
            fund
            count
            frame_j = frame(j)
            meanCol
            fund(count-frame(j)+1:count)

            fundMoments{1,i}((count-frame(j)+1), meanCol) = mean(fund(count-frame(j)+1:count));
            fundMoments{1,i}(count-frame(j)+1, st_devCol) = std(fund(count-frame(j)+1:count));
            fundMoments{1,i}(count-frame(j)+1, skewCol) = mean(fund(count-frame(j)+1:count));
            fundMoments{1,i}(count-frame(j)+1, kurtCol) = mean(fund(count-frame(j)+1:count));

            % fund_kurt = kurtosis(1:1:frame(j));

            %                 date = time_series(frame(j):end);
            %                 figure(frame(j))
            %                 plot(date, fundMoments, date, fund_kurt)
            %                 header = ['Skew and Kurtosis - ', frame, ' moving average'];
            %                 title(header)
            %                 legend('Skew', 'Kurtsosis')
            %                 set(gcf, 'YLim', max(max(fundMoments), max(fund_kurt)))

        end
    end

end

【问题讨论】:

  • 尝试uint32(count-frame(j)+1) 而不是count-frame(j)+1
  • 它没有用 - 无论如何谢谢。
  • mean 的意思是函数,mean?因为你在代码前面用一个变量覆盖了它。
  • 它被严重使用了,真的 - 我现在已经把它改成了avg,但是我早就检查过它是否有干扰,但它没有,现在有了改变到处都是我仍然收到相同的错误消息 - 不过好地方,谢谢!我已经找到了这个链接 - stackoverflow.com/questions/466972/… - 它有一个类似的问题,并且表明我的索引应该是正确的 - 所以必须是下标索引没有被识别为数字......
  • 它不起作用,因为您正在用fund(count-frame(j)+1:count) 中的实际值对矩阵mean 下标。下标必须与错误消息中描述的一致。

标签: arrays matlab indexing assign


【解决方案1】:

如 cmets 中所述,问题发生在将值分配给 mean 时。

之后它是一个变量,但询问者希望它仍然是一个函数。

我相信这也可以通过generic solution to this problem 找到,来自this question

【讨论】:

    猜你喜欢
    • 2016-08-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多