Matlab 索引超出矩阵维数错误

Matlab 索引超出矩阵维数错误,matlab,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^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
那么,让我解释一下我在做什么。我正在加载一个包含所有这些不同变量的文件。这将显示它显示的不同变量。接下来,我取四维矩阵N_平方,过滤所有大于零的值,使之等于0。然后取剩余负值的绝对值。然后我定义了几个变量,并继续进行下一个过滤

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

这一个的目标是,放弃所有N_平方的值,即0。我想这就是问题的开始。跳到for循环,然后取N_平方的第三维,并将压力转换为高度

我担心的是,当我运行这个程序时,PresNew=square(N_square(:,:,k,:);会给我错误信息

绘图错误n_2(第10行)
PresNew=挤压(N_平方(:,:,k,:);

我不知道为什么


关于如何避免这种灾难并使代码更简单,有什么想法或建议吗?谢谢。

当你从多维数组中删除随机元素时,它们会被删除,但它不再是有效的多维数组,因为它有洞。因此,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.

当你从多维数组中移除随机元素时,它们会被移除,但它不再是一个有效的多维数组,因为它有洞。因此,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.

当您使用
N_square(N_square==0))=[]
删除随机点上的元素时,这使它不再是4D矩阵,而是列向量,因此您无法使用
k
索引第三维。当您使用
N_square(N_square==0))=[]
删除随机点上的元素时,这使得它不再是一个4D矩阵,而是一个列向量,所以你不能用<代码> k>代码>索引第三维。@ DavidBloom,如果这对你有用的话,请把它标记为帮助其他问题的一个解决方案,另一个问题是相关的。我想知道如何制作一个仅由N_正方形的第三维构成的单个阵列。因为当我试着运行你的程序版本时,它会持续13个多小时。我在13岁时切断了它,并试图调试它。有什么想法吗?@davidbroom您需要删除所有for循环。我只是照原样写的。这更适合codereview.stackexchange。com@DavidBloom如果这对你有用,请考虑将它标记为帮助他人的解决方案,另一个相关的问题。我想知道如何制作一个仅由N_正方形的第三维构成的单个阵列。因为当我试着运行你的程序版本时,它会持续13个多小时。我在13岁时切断了它,并试图调试它。有什么想法吗?@davidbroom您需要删除所有for循环。我只是照原样写的。这更适合codereview.stackexchange.com