Numpy迭代数组操作

时间:2019-05-02 13:33:21

标签: python arrays python-3.x numpy for-loop

我已经开始通过使用numpy数组操作来删除越来越多的for循环。但是,我坚持以下情况。欢迎任何帮助。

我从长度为L的数组0.55和长度为L的另一个数组A中的单个已知值(B)开始。我想使用交叉乘法填充第一个数组中的剩余值。

这给了我想要的输出:

def cross_mult(B, starting_A = 0.55):
    A= np.zeros(B.shape)
    A[0] = starting_A   
    for i in range(B.shape[0])[1:]:
        A[i] = A[i-1] * B[i] / B[i-1]
    return A

没有for循环的尝试失败了:

def cross_mult(B, starting_A = 0.55):
    A= np.zeros(B.shape)
    A[0] = starting_A 
    A[1:] = A[:-1] * B[1:] / B[:-1]
    return A

我得到:

array([0.55      , 0.60401715, 0.       ])

而不是完全填充的数组,其中包含三个值。

1 个答案:

答案 0 :(得分:1)

矢量化此功能的问题在于,每个索引的计算实际上确实取决于它之前的索引,因此有必要顺序进行计算。

据我所知,在这种情况下,您被困在循环中:)

但是,如果您确实要避免显式使用循环,则可以使用accumulate

def cross_mult(B, starting_A = 0.55):
    A= np.zeros(B.shape)
    A[0] = starting_A 
    A[1:] = B[1:] / B[:-1]
    return np.multiply.accumulate(A)