重复数组的每个值两次(numpy)


问题内容

让我们A成为一个像这样的numpy数组:

A = np.array([1, 2, 3, 4, 5])

我想找到一种更清洁的方法来生成一个新数组,每个值重复两次:

B = np.array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5])

您认为这是更简单的方法吗?

import numpy as np
B = np.tile(A,2).reshape(2,-1).flatten('F')

问题答案:

您可以使用numpy.column_stacknumpy.ndarray.flatten

In [12]: numpy.column_stack((A, A)).flatten()                                                    
Out[12]: array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5])

时序比较:

In [27]: A = numpy.array([1, 2, 3, 4, 5]*1000)

In [28]: %timeit numpy.column_stack((A, A)).flatten()                                            
10000 loops, best of 3: 44.7 µs per loop

In [29]: %timeit numpy.repeat(A, 2)                                                              
10000 loops, best of 3: 104 µs per loop

In [30]: %timeit numpy.tile(A,2).reshape(2,-1).flatten('F')                                      
10000 loops, best of 3: 129 µs per loop