当前位置: 首页 > 面试题库 >

重复数组的每个值不同的时间

公西繁
2023-03-14
问题内容

假设a = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]s = [3, 3, 9, 3, 6, 3]。我正在寻找最好的方法来重复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,并且数组定义为numpy.ndarray。我周围中搜索和了解repeattilecolumn_stack能很好地被用来重复每个元素n次,但我想每个人重复不同的时间。

一种方法是:

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

我想知道是否有更好的方法。


问题答案:

这就是numpy.repeat它的作用:

>>> 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中,您可以执行以下操作:

>>> from itertools import repeat, chain, imap
>>> list(chain.from_iterable(imap(repeat, a, s)))
[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]

但是,当然它将比其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


 类似资料:
  • 我想知道是否可以编辑在循环中处理的当前对象 我正在处理一组对象,我想仔细查看并在数据库中查找与该问题对象相关联的答案。因此,对于每个问题,去获取答案对象,并更新我的循环中的当前>,以便我可以在其他地方输出/处理。

  • 我想通过删除所有具有相同值的行,但无法获取。

  • 我每次都得到10个相同的结果:

  • 假设使用JSON.parse我在一个数组中一起得到了4个可能的答案(像选择题测验)。那个数组的每个值都有一个“特征”(我不知道还能怎么称呼它)。我想通过数组的每个值寻找特定的特征,并过滤掉那些不符合条件的值。 示例数组: 数组的第一个值(1)是正确答案,因为它的“特征”通过说它是“真”来指示它。我想让控制台打印出正确的数值。 示例:正确答案为:1 谢谢你的任何帮助

  • 我正在试图理解为什么下面的代码会像它那样运行。具体而言,为什么第一个表达式会输出的完整和最终版本?我意识到这和吊装有关(也许?)或者其他一些我没有完全理解的概念。只是在网上搜索这个是很有挑战性的,因为我没有合适的词库来搜索我想知道的东西。 我在为自己编写代码时发现了这一点,其中我希望通过for-loop看到对象在每次迭代时的状态。我很惊讶地看到输出到控制台的对象在每一个回合都是一样的;该状态是整个

  • 问题内容: 我试图弄清楚如何为给定列中的每个不同值重置mysql中的行号。最好用一个例子来解释一下: 我有一组进行客户访问的用户,每个客户可能会被访问​​多次,并且我的表记录了访问的日期(但不是这是第一次,第二次,第三次访问)。所以我的桌子看起来像: 我要查找的是给定日期段内进行了多少次(例如)第二次访问。因此,在上面的数据中,有3次首次访问和2次第二次访问。 我假设我需要使用类似@rownum功