我已经开始通过使用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. ])
而不是完全填充的数组,其中包含三个值。
答案 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)