设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
?
答案 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
请注意,这只适用于小型数组,append
,hstack
和concatenate
应渐近收敛,因为所有这些函数都调用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
看起来我们的赢家是:创建一个空数组,然后设置元素。这是假定某个数组大小,但其中大多数应该类似地扩展。