[英]Index Exceeds Matrix Dimensions Error
我目前正在创建海拔高度直方图,在该直方图中会发生某种类型的大气不稳定性。 具体来说,就是当我们所称的值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
所以,让我解释一下我在做什么。 我正在加载具有所有这些不同变量的文件。 链接到图像这显示了它显示的不同变量。 接下来,我将使用4-D矩阵N_square并将所有大于零的值过滤为等于0。然后,将剩余的负值的绝对值作为绝对值。 然后,我定义几个变量并继续进行下一个过滤。
(N_square(N_square==0)=[];
这个目标的目的是只丢弃所有N_square的值为0的值。我认为这是问题开始的地方。 跳到for循环,然后使用N_square的第3维并将压力转换为高度。
我担心的是,当我运行此代码时,PresNew = squeeze(N_square(:,:,k,:)); 给我错误。
Error in PlottingN_2 (line 10) PresNew = squeeze(N_square(:,:,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.
解决方案是在索引编制后(即在循环内)删除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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.