【问题标题】:Interpolate nonmonotonically sampled N-D array along one dimension沿一维内插非单调样本 N 维数组
【发布时间】:2013-12-18 04:42:01
【问题描述】:

我有一个 3D 体积(80x80x3 点)的测量值([646 2] 个值和时间点)。此数据未排序,并且样本时间点之间的时间不等距。我想重新采样/插值以减少时间点(比如 [0:0.1:1] 间距)。所有数据一起变成一个 [80 80 3 646 2] 数组,其中 [: : : : 2] 是时间,我想插值。

我的第一次尝试是使用 interp1,但下面的回复已经进一步帮助了我,现在我不确定的问题是如何插入到时间,当它与测量值共享其维度时?我的意思是 [: : : : 1] 是值, [: : : : 2] 是时间点。

【问题讨论】:

  • x in interp1 必须是向量
  • 啊,好吧,这就是为什么我的尝试没有奏效;我必须制作一个 3 折嵌套循环来遍历每一点。也许 interp 不是使用正确的函数。
  • interpn 可能会有所帮助
  • 啊,谢谢,你和列侬很好地帮助了我

标签: arrays matlab multidimensional-array interpolation resampling


【解决方案1】:
 % suppose your original matrix ranges from 1:80,1:80,1:3,1:646
 [x,y,z,t] = ndgrid(1:1:80,1:1:80,1:1:3,1:646);   

 % and you want to interpolate in finer constructed grids with interval of 0.1
 [xi,yi,zi,ti] = ndgrid(1:0.1:80,1:0.1:80,1:0.1:3,1:0.1:646);

 % v is your original matrix measurement matrix, vi is the interpolation
 vi = interpn(x,y,z,t,v,xi,yi,zi,ti,'spline');

【讨论】:

  • 是的,这就是我需要的!但是,数据没有排序,您的解决方案需要它才能正常工作。还没有弄清楚如何订购它,因为如果我添加时间点,它就会变成 [80 80 3 646 2] 数组。然后排序到第 5 或第 4 维没有意义,因为它包含测量值和时间值。我想我需要在'sortrows'和'sort'之间进行排序。之后,您的解决方案就起作用了。
  • 我不认为 x,y,z,t 需要为插值排序。您可以尝试将它们的坐标直接添加到 ndgrid 函数中。如果你的 xi,yi,zi,ti 在 xyzt 的范围内,interpn 应该可以工作。
  • 谢谢!但是,我想将它内插到时间和时间将与测量值在同一维度上,对吗?等等,我会试着在我的问题中澄清一下。
猜你喜欢
  • 2021-11-24
  • 2013-01-08
  • 2016-06-30
  • 2020-09-06
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多