通过复制数组中的每个项创建新的numpy数组



我想通过在另一个数组中重复给定次数(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])

最新更新