Numpy 将时间间隔序列应用于多维 ndarray(例如坐标)
Numpy applying a time interval sequence to a multidimensional ndarray (such as coordinates)
编辑:根据@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”功能,或者生成相同数据的更好方法。
我希望这已经足够清楚了,如果不够清楚请告诉我。提前谢谢你。
我认为,numpy.interp
应该符合您的 expectations.For 示例,如果 a 有一个长度为 20 的二维数组,并且想要插入不同的 common_ti
值,其长度为30 , 代码如下
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
编辑:根据@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”功能,或者生成相同数据的更好方法。
我希望这已经足够清楚了,如果不够清楚请告诉我。提前谢谢你。
我认为,numpy.interp
应该符合您的 expectations.For 示例,如果 a 有一个长度为 20 的二维数组,并且想要插入不同的 common_ti
值,其长度为30 , 代码如下
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