Добавление к массиву numpy в цикле - PullRequest
0 голосов
/ 27 мая 2020
• 1000 Я хочу постоянно добавлять массив numpy к другому, находясь в for-l oop:
step_n = 10
steps = np.empty([step_n,1])

for n in range(step_n):
    step = np.random.choice([-1, 0, 1], size=(1,2))
    #steps.append(step) -> if would be lists, I would do it like that
    a = np.append(steps,step)
    #something will be checked after each n

print(a)

Результат должен быть c типа <class 'numpy.ndarray'> и выглядеть так:

[[-1.  0.]
 [ 0.  0.]
 [-1. -1.]
 [ 1. -1.]
 [ 1.  1.]
 [ 0. -1.]
 [-1.  1.]
 [-1.  0.]
 [ 0. -1.]
 [ 1.  1.]]

Однако код не работает по некоторым (наиболее вероятно очевидным) причинам. Может кто-нибудь подскажет?

1 Ответ

1 голос
/ 27 мая 2020
import numpy as np

step_n = 10
steps = np.random.choice([-1, 0, 1], size=(1,2))
for n in range(step_n-1):
    step = np.random.choice([-1, 0, 1], size=(1,2))
    print(steps)
    steps = np.append(steps, step, axis=0)
    #something will be checked after each n

print(steps)

Одна из проблем заключается в том, что ваша переменная steps , которая инициализируется вне for l oop , имеет другой размер , чем каждый шаг внутри. Я изменил способ инициализации переменной steps , создав ваш первый шаг за пределами for l oop. Таким образом, ваша переменная шагов уже имеет соответствующий размер. Но обратите внимание, что из-за этого вам нужно сократить на 1 итерацию для l oop.

Кроме того, вы хотите обновить переменную steps в каждой для l oop, а не создайте внутри нее новую переменную « a ». В вашем коде вы просто получите массив шагов (который никогда не меняется) и только последний шаг.

...