Удаление определенного элемента из np.array, когда он совпадает с местоположением - PullRequest
0 голосов
/ 13 октября 2018

Для программы на языке Python «Частица в коробке» мне нужно вставить пробел в плоскости x, y.Я отслеживаю x- и y-расположение каждой частицы и x- и y-компоненты скоростей в массивах numpy.

У меня есть две ошибки.

1) positie_y[z] <= 0 and positie_x[z] > 0.8 and positie_x[z] < 0.9 нельзя использовать для массивов numpy.Я новичок в numpy массивах, поэтому, пожалуйста, объясните, как использовать любые () или все () или другие параметры?

2) np.delete не работает: частицы не исчезают.Это потому, что я не использую это правильно или есть другой способ сделать это?

def particles(n, gap):
    dt = 0.01

    position_x = []
    position_y = []
    speed_x = []
    speed_y = []

    for i in range(n):
        alpha = random.random() * 360
        speed = (0.1)*random.random() * alpha
        speed_x.append(math.sin(snelheid))
        speed_y.append(math.cos(snelheid))
        position_x.append(0.25)
        position_y.append(0.75)
    position_x = np.array(position_x)
    position_y = np.array(position_y)
    speed_x = np.array(speed_x)
    speed_y = np.array(speed_y)

Пока здесь, это не работает нормально.Проблема где-то в следующем коде.

    while True:
        position_x = position_x + speed_x * dt
        position_y = position_y + speed_y * dt
        # 'z' is the position number of the particle in the numpy array.        
        for z in range(0, n):
            # Gap == 1 means there is a gap.
            if gap == 1:
                # The gap is at y = 0 and 0.8 < x < 0.9
                if position_y[z] <= 0 and position_x[z] > 0.8 and position_x[z] < 0.9:
                    np.delete(position_x, position_x[z])
                    np.delete(position_y, position_y[z])
                    np.delete(speed_x, speed_x[z])
                    np.delete(speed_y, speed_y[z])

После этого я нанесу на график каждую частицу с plt.plot(positie_x, positie_y, 'ro') и particles(100, 1)

1 Ответ

0 голосов
/ 13 октября 2018

Фрагмент:

np.delete(position_x, position_x[z])

не работает, потому что функция numpy.delete не вносит изменений в данный объект массива, а скорее возвращает новый массив без удаленных элементов.

Итак, ваш код должен быть написан так:

position_x = np.delete(position_x, position_x[z])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...