как постепенно обновлять массив - PullRequest
0 голосов
/ 10 января 2020

предположим, что было 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

но векторизованным способом.

любой способ решить эту проблему? спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...