предположим, что было 3 случайных массива:
A = np.random.rand( 100 )
B = np.random.rand( 100 )
C = np.random.choice( 100, size=100 )
, что я пытался сделать, как показано ниже:
V = np.zeros( 100 )
while True:
v = V.copy()
V = A * ( B + V[ C ] )
if np.abs( V - v ).max() < 1e-9:
break
проблема в том, что в каждой итерации while l oop, каждый компонент V, не обновляется на месте.
например, при расчете V [10] может потребоваться значение V [5], но в то время V [5] имеет старое значение, которое было сгенерировано на последней итерации, а не самое новое значение, генерируемое на этой итерации.
это приводит к гораздо большему количеству циклов и иногда даже к неработоспособной ситуации.
Чтобы быть более точным, эффект, который я пытаюсь реализовать, выглядит следующим образом:
V = np.zeros( 100 )
while True:
v = V.copy()
for index in range( len( V ) ):
V[index] = A[index] * ( B[index] + V[ C[index] ] )
if np.abs( V - v ).max() < 1e-9:
break
но векторизованным способом.
любой способ решить эту проблему? спасибо!