【问题标题】:Numpy applying a time interval sequence to a multidimensional ndarray (such as coordinates)Numpy将时间间隔序列应用于多维ndarray(例如坐标)
【发布时间】:2021-07-19 04:44:26
【问题描述】:

编辑:根据@user1319128 的建议,向间隔数组添加前缀/后缀值,使它们的长度与其对应的数据数组相同,并且确实 interp 完成了这项工作。可以肯定的是,他的解决方案是可行且良好的。我只是看不到它,因为我又累又笨。

我确信这是一个相当普通的应用程序,但是我没有找到或想出一种方法来做到这一点,而无需在 numpy 之外执行它。也许我的大脑只是需要休息一下,无论如何这里是示例和解决方案要求的问题。

所以我必须使用不同长度的数组,并且我想将它们之间的公共时间间隔应用于这些数组,这样结果就是我有这些数组的版本,它们的长度都是相同的,并且它们的值彼此相关在同一行(如果有意义的话)。在下面的示例中,我将此功能命名为“apply_timeintervals_to_array”。示例代码:

import numpy as np
from colorsys import hsv_to_rgb

num_xy = 20
num_colors = 12

#xy = np.random.rand(num_xy, 2) * 1080
xy = np.array([[ 687.32758344,  956.05651214],
               [ 226.97671414,  698.48071588],
               [ 648.59878864,  175.4882185 ],
               [ 859.56600997,  487.25205922],
               [ 794.43015178,   16.46114312],
               [ 884.7166732 ,  634.59100322],
               [ 878.94218682,  835.12886098],
               [ 965.47135726,  542.09202328],
               [ 114.61867445,  601.74092126],
               [ 134.02663822,  334.27221884],
               [ 940.6589034 ,  245.43354493],
               [ 285.87902276,  550.32600784],
               [ 785.00104142,  993.19960822],
               [1040.49576307,  486.24009511],
               [ 165.59409198,  156.79786175],
               [1043.54280058,  313.09073855],
               [ 645.62878826,  100.81909068],
               [ 625.78003257,  252.17917611],
               [1056.77009875,  793.02218098],
               [   2.93152052,  596.9795026 ]])
xy_deltas = np.sum((xy[1:] - xy[:-1])**2, axis=-1)
xy_ti = np.concatenate(([0.0],
                        (xy_deltas) / np.sum(xy_deltas)))

colors_ti = np.concatenate((np.linspace(0, 1, num_colors),
                           [1.0]))

common_ti = np.unique(np.sort(np.concatenate((xy_ti,
                                              colors_ti))))

common_colors = (np.array(tuple(hsv_to_rgb(t, 0.9, 0.9) for t
                                in np.concatenate(([0.0],
                                                   common_ti,
                                                   [1.0]))))
                 * 255).astype(int)[1:-1]
common_xy = apply_timeintervals_to_array(common_ti, xy)

因此可以使用公共数组进行额外的计算或渲染。

问题是什么可以完成“apply_timeintervals_to_array”功能,或者是生成相同数据的更好方法。

我希望这足够清楚,如果不是,请告诉我。提前谢谢你。

【问题讨论】:

  • 问题不清楚。您的意思是,您想重新采样 2 个不同长度的时间序列,以便它们同时表示数据?
  • @user1319128 而是将公共时间序列应用于不同长度的数组。或者更具体地说,最终结果应该是具有通用数据的通用时间尺度。
  • 在您的示例代码中,xy 数组的两列长度相同。它会导致混乱。它们属于不同的时间戳吗?并且您想提取/插入常用时间戳的数据?
  • @user1319128 是的,因为是一个数组,所以这两个数组就是colors和xy,具体来说。更清楚?

标签: python numpy interpolation numpy-ndarray


【解决方案1】:

我认为,numpy.interp 应该符合您的期望。例如,如果 a 有一个长度为 20 的二维数组,并且想在不同的长度为 30 的common_ti 值处进行插值,则代码如下.

xy = np.arange(0,400,10).reshape(20,2)
xy_ti = np.arange(20)/19
common_ti = np.linspace(0,1,30)
x=np.interp(common_ti,xy_ti,xy[:,0]) # interpolate the first column
y=np.interp(common_ti,xy_ti,xy[:,1]) #interpolate the second column

【讨论】:

  • 我不得不使用不同的数组,因为您的 xy_ti 的长度为 19 ,但是,xy 的长度为 20。确保 xy_tixy 的长度匹配。 common_ti 长度可以不同。
猜你喜欢
  • 2021-10-21
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 2021-08-08
  • 1970-01-01
相关资源
最近更新 更多