【问题标题】:Index Exceeds Matrix Dimensions Error索引超出矩阵维度错误
【发布时间】:2016-06-09 19:29:46
【问题描述】:

我目前正在创建一个高度直方图,在该直方图上会发生某种大气不稳定性。具体来说,就是当我们所说的 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,:));

我也不知道为什么。

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

【问题讨论】:

  • 当您使用N_square(N_square == 0)) = [] 删除随机点的元素时,这使得它不再是一个 4D 矩阵而是一个列向量,因此您无法使用 k 索引第三个维度。

标签: matlab


【解决方案1】:

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

【讨论】:

  • @DavidBloom 如果这对您有用,请考虑将其标记为帮助他人的解决方案
  • 好的,另一个相关的问题。我想知道如何制作一个仅由 N_square 的第三维组成的单个数组。因为当我尝试运行您的程序版本时,它会持续 13 多个小时。我在 13 点将其切断并尝试调试。有什么想法吗?
  • @DavidBloom 您将需要删除所有的 for 循环。我只是按原样写的。这更适合 codereview.stackexchange.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
相关资源
最近更新 更多