索引超出矩阵尺寸错误

时间:2016-06-09 19:29:47

标签: matlab

我目前正致力于创建一种高度不稳定性发生的海拔高度直方图。具体而言,当我们称之为N ^ 2的值小于零时。这就是问题所在。我试图根据海拔高度绘制出现频率。

load /data/matlabst/DavidBloom/N_square_Ri_number_2005.mat

N_square(N_square > 0) = 0;
N_square = abs(N_square);

k = (1:87);
H = 7.5;
p0 = 101325;
nbins = (500);

N_square(N_square==0)=[];
Alt = zeros(1,578594);
PresNew = squeeze(N_square(:,:,k,:));

for lati = 1:32
    for long = 1:64
        for t = 1:1460
            for k = 1:87
                Alt(1,:) = -log((PresNew)/p0)*H;
            end
        end
    end
end

所以,让我解释一下我在做什么。我正在加载一个包含所有这些不同变量的文件。 Link To Image这显示了它显示的不同变量。接下来,我采用4-D矩阵N_square并且我将所有大于零的值过滤为等于0.然后我取剩余负值的绝对值。然后我定义了几个变量并继续进行下一个过滤。

(N_square(N_square==0)=[];

这个目标的目的是放弃N_square的所有0值。我认为这是问题的开始。跳到for循环,然后我采用N_square的第三维并将压力转换为高度。

我担心的是,当我运行它时,PresNew = squeeze(N_square(:,:,k,:));给了我错误。

Error in PlottingN_2 (line 10) PresNew = squeeze(N_square(:,:,k,:));

我不知道为什么。

关于如何避免这场灾难并使我的代码更简单的任何想法或建议?谢谢。

1 个答案:

答案 0 :(得分:2)

当您从多维数组中删除随机元素时,它们将被删除它不再是有效的多维数组,因为它中有空洞。因此,MATLAB会将结果合并到一个向量中,并且您无法像我一样尝试将向量索引到向量的第三维。

data = magic(3);
%   8     1     6
%   3     5     7
%   4     9     2

% Remove all values < 2
data(data < 2) = []
%   8     3     4     5     9     6     7     2

data(2,3)
% Index exceeds matrix dimensions.

解决方法是在索引之后删除0(即在循环中)。

Alt = zeros(1,578594);
for lati = 1:32
    for long = 1:64
        for t = 1:1460
            for k = 1:87
                % Index into 4D matrix
                PresNew = N_square(:,:,k,:);

                % NOW remove the 0 values
                PresNew(PresNew == 0) = [];

                Alt(1,:) = -log((PresNew)/p0)*H;
            end
        end
    end
end