gpt4 book ai didi

python - 使用Python将速度分量转换为三维数组中的速度

转载 作者:行者123 更新时间:2023-12-01 04:56:10 25 4
gpt4 key购买 nike

我目前有一个 n 体系统在 10,000 个时间点的速度列表。它是一个三维数组,涉及三个空间维度中 t 个时间点的 n 个粒子。例如,对于两个时间点的三个粒子,设置为

[[[vx1][vy1][vz1]
[vx2][vy2][vz2]
[vx3][vy3][vz3]]
[[vx1][vy1][vz1]
[vx2][vy2][vz2]
[vx3][vy3][vz3]]]

我的最终目标是拥有一个像这样的数组:

[[[speed1]
[speed2]
[speed3]]
[[speed1]
[speed2]
[speed3]]]

但是当粒子数量自由变化时,我无法让速度分量以二次方的方式相加。我可以用两个粒子来做到这一点,如下所示:

# Takes all velocities and converts them to speeds
all_speeds=[]
for i in range(len(all_velocities)):
all_speeds.append([math.sqrt(all_velocities[i][0][0]**2\
+all_velocities[i][0][1]**2+all_velocities[i][0][2]**2)],\
[math.sqrt(all_velocities[i][1][0]**2+all_velocities[i][1][1]**2\
+all_velocities[i][1][2]**2)])

但我不确定如何将其扩展到n个粒子。我的最终目标是对速度数组进行平方,然后将其乘以质量数组,我必须计算系统的动能,但我无法将其扩展到适用于任何输入。谢谢。

最佳答案

import numpy as np
v1 = [[[1,1,1],
[2,2,2],
[3,3,3],
[4,4,4]],
[[1,1,1],
[2,2,2],
[3,3,3],
[4,4,4]]]

a = np.array(v1)

a.shape 是 (t, n, d)。您需要三维速度平方和的平方根:

>>> a
array([[[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4]],

[[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4]]])
>>> #square each velocity
>>> b = np.square(a)
>>> b
array([[[ 1, 1, 1],
[ 4, 4, 4],
[ 9, 9, 9],
[16, 16, 16]],

[[ 1, 1, 1],
[ 4, 4, 4],
[ 9, 9, 9],
[16, 16, 16]]])
>>> #sum along the dimensions
>>> b = b.sum(axis = 2)
>>> b
array([[ 3, 12, 27, 48],
[ 3, 12, 27, 48]])
>>> # root of each sum
>>> b = np.sqrt(b)
>>> b
array([[ 1.73205081, 3.46410162, 5.19615242, 6.92820323],
[ 1.73205081, 3.46410162, 5.19615242, 6.92820323]])
>>>

b.shape 是 (t,n)。看起来我的数据集中没有粒子加速。

或者简单地说:

>>> np.linalg.norm(a, axis = 2)
array([[ 1.73205081, 3.46410162, 5.19615242, 6.92820323],
[ 1.73205081, 3.46410162, 5.19615242, 6.92820323]])
>>>

关于python - 使用Python将速度分量转换为三维数组中的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27340042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com