【问题标题】:Adding through an array with np.where function Numpy Python使用 np.where 函数 Numpy Python 通过数组添加
【发布时间】:2021-06-03 19:32:00
【问题描述】:

我正在尝试编写一个函数,它一次添加一个Sequence,直到达到Number。因此,由于Sequence 数组的总和是 21 而不是 45,它会将Sequence 3 的第一个元素添加到Sequence,因此它变成[3, 7, 11, 3]。由于[3, 7, 11, 3] 等于 24 并且小于 45,序列中的下一个元素将被添加,即 7,Sequence 更新为[3, 7, 11, 3, 7],依此类推,直到Number> np.sum([Sequence] 不返回True。下面的np.where函数有问题怎么解决?

代码:

Number = 45
Number2= 46
Sequence = np.array([3, 7, 11])
p = 0
np.where(Number> np.sum([Sequence]),np.append(Sequence,Sequence[p], p+= 1))
np.where(Number2> np.sum([Sequence]),np.append(Sequence,Sequence[p], p+= 1))

预期输出

Number = [3,7,11,3,7,11,3]
Number2 = [3,7,11,3,7,11,3,7]

【问题讨论】:

  • Python 首先计算函数参数,然后传入结果。 where 是一个函数,而不是一个迭代器。在尝试做这种奇特的事情之前,在交互式会话中练习 where
  • 除了像np.cumsum 这样的函数之外,大多数numpy 函数在其输入“并行”上运行,作为整个数组。它们不按顺序运行。列表更适合像您这样的顺序任务。
  • 无论如何我可以用 pandas 模块或 np.cumsum 植入我想要做的事情

标签: python arrays function numpy


【解决方案1】:

我不相信这可以作为单线来完成。 np.where 的第二个和第三个参数应该是序列。循环很简单:

seq45 = []
for n in itertools.cycle(Sequence):
    seq45.append(n)
    if sum(seq45) >= 45: break

【讨论】:

  • 我正在尝试使用 numpy 函数,因为它更加优化,但无论如何感谢。
  • 孔子说,一个工作的非最优解决方案比一个非工作的优化解决方案更好......你当然可以让 seq45 成为 np.array。
猜你喜欢
  • 2021-06-02
  • 2019-05-19
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 2013-08-07
  • 1970-01-01
相关资源
最近更新 更多