【问题标题】:Create new numpy array by duplicating each item in an array通过复制数组中的每个项目来创建新的 numpy 数组
【发布时间】:2021-05-28 09:16:57
【问题描述】:

我想通过将另一个数组中的每个项目重复给定次数 (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]

【问题讨论】:

标签: python arrays list numpy for-loop


【解决方案1】:

我不知道具体原因,但对我来说,这段代码比 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)

【讨论】:

  • 您的解决方案生成不同的数组[1 2 3 4 1 2 3 4 1 2 3 4]。如果不需要他们的订单,那么这是一个很好的解决方案。
  • 顺序很重要。
猜你喜欢
  • 2021-07-27
  • 1970-01-01
  • 2021-01-31
  • 2017-12-30
  • 1970-01-01
  • 2019-06-15
  • 2018-10-04
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多