2

配列の各行を 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]])
4

2 に答える 2

3

これは の仕事です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、同様の状況で役立ちます。

于 2013-09-02T13:33:08.180 に答える