In [17]: a
Out[17]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [18]: np.random.seed(0)
In [19]: random_pick(a, W=2)
Out[19]: array([ 1, 4, 6, 7, 10])
紧凑型版本
这也转化为更紧凑的版本-
In [81]: W = 2
In [82]: np.random.seed(0)
In [83]: a[np.random.randint(0,W,len(a)//W) + np.arange(0,len(a),W)]
Out[83]: array([ 1, 4, 6, 7, 10])
通用窗口长度
为了使其通用,以便任何窗口长度都可以输入,它将修改为-
def random_pick_generic(a, W):
L = W*(len(a)//W)
b = a[:L].reshape(-1,W)
idx = np.random.randint(0,b.shape[1], len(b))
out = b[np.arange(len(idx)), idx]
if len(a[L:])>0:
out = np.r_[out, np.random.choice(a[L:])]
return out
样本运行-
In [50]: a
Out[50]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [51]: np.random.seed(0)
In [52]: random_pick_generic(a, W=2)
Out[52]: array([ 1, 4, 6, 7, 10])
In [53]: np.random.seed(0)
In [54]: random_pick_generic(a, W=3)
Out[54]: array([ 1, 5, 7, 10])
扩展到3D案例:[批量大小、时间步长、通道]
假设可分割窗口长度random_pick的解决方案将修改为-
b = a.reshape(-1,a.shape[1]//W,W,a.shape[2])
idx = np.random.randint(0,b.shape[2], b.shape[1])
out = b[:,np.arange(len(idx)), idx]
对于可被窗口/组长度整除的长度,我们可以将长度重塑为列数的2D数组,然后每行选择一个随机元素-
样本运行-
紧凑型版本
这也转化为更紧凑的版本-
通用窗口长度
为了使其通用,以便任何窗口长度都可以输入,它将修改为-
样本运行-
扩展到
3D
案例:[批量大小、时间步长、通道]假设可分割窗口长度
random_pick
的解决方案将修改为-相关问题 更多 >
编程相关推荐