繁体   English   中英

扩展和向前填充numpy数组

[英]Extend and forward fill numpy array

我想将数组的每一行重复N次。 有快速的方法吗?

范例(N = 3):

# INPUT
a=np.arange(9).reshape(3,3)
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
# OUTPUT 
array([[0, 1, 2],
       [0, 1, 2],
       [0, 1, 2],
       [3, 4, 5],
       [3, 4, 5],
       [3, 4, 5],
       [6, 7, 8],
       [6, 7, 8],
       [6, 7, 8]])

这是np.repeat的工作:

np.repeat(a,3,axis=0)
array([[0, 1, 2],
       [0, 1, 2],
       [0, 1, 2],
       [3, 4, 5],
       [3, 4, 5],
       [3, 4, 5],
       [6, 7, 8],
       [6, 7, 8],
       [6, 7, 8]])

请注意,这比其他方法快得多。

N=100
%timeit np.repeat(a,N,axis=0)
100000 loops, best of 3: 4.6 us per loop

%timeit rows, cols = a.shape;b=np.hstack(N*(a,));b.reshape(N*rows, cols)
1000 loops, best of 3: 257 us per loop

N=100000
%timeit np.repeat(a,N,axis=0)
100 loops, best of 3: 3.93 ms per loop

%timeit rows, cols = a.shape;b=np.hstack(N*(a,));b.reshape(N*rows, cols)
1 loops, best of 3: 245 ms per loop

同样, np.tile在类似情况下也很有用。

>>> N = 3
>>> rows, cols = a.shape
>>> b=np.hstack(N*(a,))
>>> b
array([[0, 1, 2, 0, 1, 2, 0, 1, 2],
       [3, 4, 5, 3, 4, 5, 3, 4, 5],
       [6, 7, 8, 6, 7, 8, 6, 7, 8]])
>>> b.reshape(N*rows, cols)
array([[0, 1, 2],
       [0, 1, 2],
       [0, 1, 2],
       [3, 4, 5],
       [3, 4, 5],
       [3, 4, 5],
       [6, 7, 8],
       [6, 7, 8],
       [6, 7, 8]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM