Что-то из последующего вопроса до my last one о написании эффективных программ python. Я играю с написанием своих собственных физических симуляций и хочу уйти от использования миллиарда классов и методов.Запись результатов расчета обратно в его массив?
Поэтому я хочу иметь возможность выполнять вычисления на наборах данных. Это моя последняя попытка:
particles = np.array([ #position, last position, velocity, mass, size
[[200,0],[200,200],[5,5],10,15], \
[[210,210],[210,210],[8,2],20,25],\
[[215,215],[195,195],[5,3],5,15], \
[[192,186],[160,160],[10,-4],30,30]])
def moveParticles(part, dt):
part[0] = part[1]
part[1] += np.multiply(part[2],dt)
Я пытаюсь хранить каждое из свойств каждой частицы в массиве, а затем обновить их на месте. Здесь я пытаюсь умножить вектор скорости на временной шаг, а затем добавить это к вектору положения. Это кажется естественным образом выразить это мне, но это дает мне ошибку:
TypeError: can't multiply sequence by non-int of type 'float'
Могу ли я записать данные обратно в тот же массив, и как бы я идти об этом?
Я читал об этом и смотрел на вещи, такие как функция векторизации numpy, itertools, map() и т. Д. ... но как я могу поместить результаты обратно в исходный массив?
Или используется промежуточный массив для хранения результатов, прежде чем перезаписывать оригинал, единственный способ пойти?
Как вызывается перемещение частиц? – Sinkingpoint
Пожалуйста, укажите требуемый выход. – root
Поскольку у вас есть списки различной длины в ваших данных, то, что возвращает 'np.array', является dtype' object' и 'particle [:, 0]', 'particle [:, 1]' и 'particle [:, 2] '- это списки Python, а не массивы. Следовательно, ошибка, когда вы пытаетесь размножить список скоростей с помощью 'dt' float. Вы должны попробовать хранить однородные данные в массивах. Мне нравится беззаботность Балинта! – Jaime