gpt4 book ai didi

相互依赖数组的 numpy 向量化

转载 作者:行者123 更新时间:2023-12-02 08:18:51 26 4
gpt4 key购买 nike

我需要根据它们之前的元素同时填充两个相互依赖的数组,如下所示:

import numpy as np
a = np.zeros(100)
b = np.zeros(100)
c = np.random.random(100)

for num in range(1, len(a)):
a[num] = b[num-1] + c[num]
b[num] = b[num-1] + a[num]

有没有办法使用 numpy 真正对其进行矢量化(即不使用 numpy.vectorize)?请注意,这些是任意数组,而不是为这些特定值寻找解决方案。

最佳答案

如@Praveen 的帖子中所述,我们可以编写这些表达式进行几次迭代以尝试找到闭合形式,这当然是 c 的三角矩阵。然后,我们只需添加 iteratively-scaled b[0] 即可获得完整的 b。要获得 a,我们只需添加 bc 的移位版本即可。

因此,在实现方面,这里使用一些 NumPy broadcasting 对其进行了不同的处理。和 dot-product出于效率目的-

p = 2**np.arange(a.size-1)
scale1 = p[:,None]//p
b_out = np.append(b[0],scale1.dot(c[1:]) + 2*p*b[0])
a_out = np.append(a[0],b_out[:-1] + c[1:])

如果 ab 总是从 0 开始,那么最后两步的代码将简化为 -

b_out = np.append(0,scale1.dot(c[1:]))
a_out = np.append(0,b_out[:-1] + c[1:])

关于相互依赖数组的 numpy 向量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39392572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com