在numpy数组的末尾附加n个数组副本

时间:2014-02-20 23:42:31

标签: python arrays numpy append

设A和B为两个numpy数组。

我想在n末尾添加B A份副本:

C = [A, B, B, B, ... (n times) ... B, B]

如何使用numpy简单/高效地完成此操作?

这样的东西
numpy.append(A, [B * n])        # B * n  is not n copies of B,
                                #      but rather B multiplied by constant n ?

numpy.concatenate

2 个答案:

答案 0 :(得分:3)

您似乎想要使用tile()

C = np.concatenate((A, np.tile(B,n)))

答案 1 :(得分:1)

首先让我们看看concatenate例程:

A = np.arange(1E4)
#Baseline
%timeit np.concatenate((A,A))
100000 loops, best of 3: 11.1 µs per loop

%timeit np.hstack((A,A))
10000 loops, best of 3: 20.9 µs per loop

%timeit np.append(A,A)
100000 loops, best of 3: 19 µs per loop

请注意,这只适用于小型数组,appendhstackconcatenate应渐近收敛,因为所有这些函数都调用concatenate差异是python开销。现在唯一的问题是如何创建数组B

#Using python
%timeit np.concatenate((A,[5]*10000))
1000 loops, best of 3: 1.1 ms per loop

#Tile small array
%timeit C = np.concatenate((A, np.tile(np.array(5),1E4)))
10000 loops, best of 3: 92.1 µs per loop

#Create an array of ones and multiply by a number
%timeit np.concatenate((A,np.ones(1E4)*5))
10000 loops, best of 3: 39.5 µs per loop

#Create empty array and fill from A and then set
%timeit C = np.empty(2E4); C[:10000]=A; C[10000:]=5
100000 loops, best of 3: 16.8 µs per loop

看起来我们的赢家是:创建一个空数组,然后设置元素。这是假定某个数组大小,但其中大多数应该类似地扩展。