有一个三维数组x,其形状为(2000,60,5)。如果我们认为它代表一个视频,那么2000可以代表2000帧。我想沿着第一维对它进行随机采样,即得到一组帧样本。例如,如何沿着第一维从x随机采样得到(500,60,5)的数组?
(2000,60,5)
2000
x
(500,60,5)
eufgjt7s1#
可以将x作为choice方法的第一个参数传递。如果不希望样本中出现重复的帧,请使用replace=False。例如,
choice
replace=False
In [10]: x = np.arange(72).reshape(9, 2, 4) # Small array for the demo. In [11]: x Out[11]: array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]], [[16, 17, 18, 19], [20, 21, 22, 23]], [[24, 25, 26, 27], [28, 29, 30, 31]], [[32, 33, 34, 35], [36, 37, 38, 39]], [[40, 41, 42, 43], [44, 45, 46, 47]], [[48, 49, 50, 51], [52, 53, 54, 55]], [[56, 57, 58, 59], [60, 61, 62, 63]], [[64, 65, 66, 67], [68, 69, 70, 71]]])
使用NumPy随机生成器示例的choice方法从x中采样“帧”。
In [12]: rng = np.random.default_rng() In [13]: rng.choice(x, size=3) Out[13]: array([[[40, 41, 42, 43], [44, 45, 46, 47]], [[40, 41, 42, 43], [44, 45, 46, 47]], [[16, 17, 18, 19], [20, 21, 22, 23]]]) In [14]: rng.choice(x, size=3, replace=False) Out[14]: array([[[ 8, 9, 10, 11], [12, 13, 14, 15]], [[32, 33, 34, 35], [36, 37, 38, 39]], [[ 0, 1, 2, 3], [ 4, 5, 6, 7]]])
注意,帧将是随机顺序的;如果要保持顺序,可以使用choice生成一个索引数组,然后使用排序后的索引从x中取出帧。
1条答案
按热度按时间eufgjt7s1#
可以将
x
作为choice
方法的第一个参数传递。如果不希望样本中出现重复的帧,请使用replace=False
。例如,
使用NumPy随机生成器示例的
choice
方法从x
中采样“帧”。注意,帧将是随机顺序的;如果要保持顺序,可以使用
choice
生成一个索引数组,然后使用排序后的索引从x
中取出帧。