繁体   English   中英

如何使用第三维调整Matlab矩阵的大小?

[英]How do I resize a Matlab matrix with a 3rd dimension?

所以我想将尺寸为72x144x156的矩阵调整为180x360x156网格。 我可以尝试用这个命令来做: resizem(precip,2.5) 前两个维度是纬度和经度,而最后一个维度是时间。 我不想要时间调整大小。

如果矩阵的大小为72x144,则此方法有效。 但它不适用于尺寸72x144x156。 有没有办法调整前两个尺寸而不调整第三个尺寸?

此外,最快的方法是什么(最好没有for循环)。 如果需要for循环,那就没问题了。

我在评论中暗示,但可以像这样使用interp3

outSize = [180 360 156];
[nrows,ncols,ntimes] = size(data);
scales = [nrows ncols ntimes] ./ outSize;

xq = (1:outSize(2))*scales(2) + 0.5 * (1 - scales(2));
yq = (1:outSize(1))*scales(1) + 0.5 * (1 - scales(1));
zq = (1:outSize(3))*scales(3) + 0.5 * (1 - scales(3));
[Xq,Yq,Zq] = meshgrid(xq,yq,zq);
dataLarge = interp3(data,Xq,Yq,Zq);

但是如果你知道你不想在时间点之间进行插值,问题就会简化,所以你可以像Daniel R的答案那样循环。 虽然,这个答案不会增加时间点的数量。

D= %existing matrix
scale=2.5;
E=zeros(size(D,1)*2.5,size(D,2)*2.5,size(D,3))
for depth=1:size(D,3)
  E(:,:,depth)=resizem(D(:,:,depth),scale)
end

这应该提供预期的输出。

    % s = zeros(72, 144, 156);
    % whos s;
    % news = resize2D(s, 2.5);
    % whos news;

    function [result] = resize2D(input, multiply)
        [d1, d2, d3] = size(input);
        result = zeros(d1*multiply, d2*multiply, d3);
    end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM