【问题标题】:faster method of interpolation in matlabmatlab中更快的插值方法
【发布时间】:2023-03-19 20:35:01
【问题描述】:

我正在使用 interp1 插入一些数据:

temp = 4 + (30-4).*rand(365,10);
depth = 1:10;

dz = 0.5; %define new depth interval
bthD = min(depth):dz:max(depth); %new depth vector

for i = 1:length(temp);
    i_temp(i,:) = interp1(depth,temp(i,:),bthD);
end

在这里,我通过将测量值从 1 m 增量内插到 0.5 m 增量来提高测量的分辨率。这段代码运行良好,即它为我提供了我正在寻找的矩阵。但是,当我将它应用到我的实际数据时,它需要很长时间才能运行,主要是因为我正在运行一个额外的循环,该循环贯穿各个单元格。有没有一种方法可以在不使用循环的情况下实现上述内容,换句话说,是否有更快的方法?

【问题讨论】:

  • for 循环中的 i_temp 是否是错字?你是说layerP吗?
  • 使用i_temp = interp1(depth,temp,bthD) 更有意义吗?
  • 谢谢,关于 Dan Becker 提供的答案,现在已更改:我正在寻找一种可以避免循环的解决方案!

标签: matlab interpolation


【解决方案1】:

将你的 for 循环替换为:

i_temp = interp1(depth,temp',bthD)';

如果您更改 temp 的定义方式,并且您可以接受 i_temp 是 19x365 数组而不是 365x19 数组,则可以摆脱转置。

顺便说一句,interp1 的documentation 非常清楚,您可以传入一个数组作为第二个参数。

【讨论】:

  • 太棒了。我没有意识到转置矩阵会有所作为(使它起作用)。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多