我目前正致力于创建一种高度不稳定性发生的海拔高度直方图。具体而言,当我们称之为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,:));
我不知道为什么。
关于如何避免这场灾难并使我的代码更简单的任何想法或建议?谢谢。
答案 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