我想通过在另一个数组中重复给定次数(n
)的每个项目来创建一个新的numpy数组。我目前正在使用for循环和.extend()
与列表进行此操作,但这不是很有效,特别是对于非常大的数组。
有更有效的方法吗?
def expandArray(array, n):
new_array = []
for item in array:
new_array.extend([item] * n)
new_array = np.array(new_array)
return new_array
print(expandArray([1,2,3,4], 3)
[1,1,1,2,2,2,3,3,3,4,4,4]
我不知道为什么,但是这段代码比np.repeat运行得快。对我来说:
def expandArray(array, n):
return np.concatenate([array for i in range(0,n)])
我运行了这个小基准测试:
arr1 = np.random.rand(100000)
%timeit expandArray(arr1, 5)
1.07 ms ± 25.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
和np.repeat给出如下结果:
%timeit np.repeat(arr1,5)
2.45 ms ± 148 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
可以使用numpy.repeat
函数创建复制数组
array = np.array([1,2,3,4])
new_array = np.repeat(array, repeats=3, axis=None)
print(new_array)
array([1,1,1,2,2,2,3,3,3,4,4,4])
new_array = np.repeat(array.reshape(-1,1).transpose(), repeats=3, axis=0).flatten()
print(new_array)
array([1,2,3,4,1,2,3,4,1,2,3,4])