不同大小的单元格 - 克服超过索引误差

时间:2014-02-26 20:30:21

标签: matlab multidimensional-array indexing cell-array

我想找到每个第三维的r ^ 2(第三维基本上是数据列)。然而,在尝试使用for循环索引每个单元格(循环遍历状态然后循环遍历数据集)时,我遇到了超出索引问题,因为一些第三维度很小,而其他维度较大

我首先尝试对细胞进行排序:

[dummy, Index] = sort(cellfun('size', data_O3_spring, 3), 'descend');
S = data_O3_spring(Index);

然后循环查找corrcoef(使用数据集data_O3_spring,其形式与上述相同):

for k = 1:7 % Number of states
    for j = 1:17 % largest number of sites
        r2_spring{k}(:,:,j) = power((corrcoef(S{k}(:,:,j), data_PM25_spring{k}(:,:,j), 'rows', 'pairwise')), 2);
    end
end

但是,当我超过5(最小数据集的大小)时,这会给我一个超出索引误差。

关于我的数据格式:data_O3_spring是< 1x7>包含春季月份7个州数据的单元格。

data_O3_spring{1}(其中一个州)有7个单元格(我正在查看不同的数据集),每个单元格大小为:

<61x1x7 double>
<61x1x17 double>
<61x1x8 double>
<61x1x16 double>
<61x1x5 double>
<61x1x12 double>
<61x1x13 double>

61是天数(行数)。那是第1列。第三个维度大小是我在该特定状态下查看的数据集的数量(因此它因状态而异)。

我尝试使用while循环,但没有设法让它工作。

1 个答案:

答案 0 :(得分:1)

我可能错过了一个细节,但似乎你可以改变你的循环:

for j=1:17,

for j = 1:size(S{k},3),

每个州都有不同数量的站点,这很好,因为您将输出存储在单元数组(r2_spring{k}(:,:,j))中,这不需要j索引的维度相等。

此外,将corrcoef(S{k}(:,:,j)data_O3_spring{k}(:,:,j)配对是一个问题,因为您已将data_O3_spring重新排序到S。我要说尝试:

corrcoef(S{k}(:,:,j), S{k}(:,:,j), 'rows', 'pairwise')

corrcoef(data_O3_spring{k}(:,:,j), data_O3_spring{k}(:,:,j), 'rows', 'pairwise')