効率的な Python プログラムの作成に関する前回の質問の補足質問です。私は自分自身の物理シミュレーションを書いて遊んでいて、10 億のクラスとメソッドを使用することから離れたいと思っています。
そのため、一連のデータに対して計算を実行できるようにしたいと考えています。これは私の最新の試みです:
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 の vectorize 関数、itertools、map() などを見てきましたが、結果を元の配列に戻すにはどうすればよいでしょうか?
それとも、元の配列を上書きする前に中間配列を使用して結果を保存するのが唯一の方法ですか?