"重复数组中每个值不同次数"

2024-06-26 18:00:21 发布

您现在位置:Python中文网/ 问答频道 /正文

假设a = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]和{}。我正在寻找最佳的方法来重复a[i]精确地s[i]次,然后以b = [0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3, 0.3, ... ]的形式创建一个平坦数组。在

我想尽快做这件事,因为我要做很多次。我使用Python和numpy,数组定义为努比·恩达雷. 我四处搜索,找到了repeattile和{}这些可以很好地用来重复每个元素n次,但我想把它们每一个重复不同的时间。在

一种方法是:

a = hsplit(a, 6)
for i in range(len(a)):
    a[i] = repeat(a[i], s[i])
a = a.flatten()

我想知道有没有更好的办法。在


Tags: 方法innumpy元素forlen定义时间
2条回答

下面是一个仅使用(嵌套)列表理解的单行线:

[item for z in [[x]*y for (x,y) in zip(a, s)] for item in z]

这正是^{}的作用:

>>> a = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6])
>>> s = np.array([3, 3, 9, 3, 6, 3])
>>> np.repeat(a, s)
array([ 0.1,  0.1,  0.1,  0.2,  0.2,  0.2,  0.3,  0.3,  0.3,  0.3,  0.3,
        0.3,  0.3,  0.3,  0.3,  0.4,  0.4,  0.4,  0.5,  0.5,  0.5,  0.5,
        0.5,  0.5,  0.6,  0.6,  0.6])

在纯Python中,您可以执行以下操作:

^{pr2}$

当然,它会比它的NumPy等同物慢得多:

>>> s = [3, 3, 9, 3, 6, 3]*1000
>>> a = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]*1000
>>> %timeit list(chain.from_iterable(imap(repeat, a, s)))
1000 loops, best of 3: 1.21 ms per loop
>>> %timeit np.repeat(a_a, s_a) #a_a and s_a are NumPy arrays of same size as a and b
10000 loops, best of 3: 202 µs per loop

相关问题 更多 >