用numpy表示粒子运动

时间:2018-09-10 19:52:00

标签: python numpy

我从未使用过numpy来代表imagesvolumetric data来代表它们进行操作。无论如何,numpy可以很好地存储表格,还是更适合在熊猫上完成?

我基本上需要存储表示粒子运动的粒子,并且不确定如何定义形状,以便例如可以在矩阵上运行linalg.svd并更新最后一个字段Determinant < / p>

Position (Vector3 or 3 floats)
Velocity (Vector3 or 3 floats)
Matrix (Matrix or 9 floats)
Determinant (1 float)

我想象过我会创建一个形状(16, 1000)来容纳1000个粒子,但是我将如何重塑9个浮点的matrix以便将其传递给linalg.svd

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

Numpy使用structured arrays可以很好地处理这种情况。 对于您的特定情况,您可以按如下方式创建一个数组(假设您希望Matrix为3x3,以便与SVD一起使用)。 edit :创建数组应为np.zeros,然后才能逐行或逐字段复制数据。

d = dtype([('pos', float, 3), ('v', float, 3), ('Matrix', float, (3, 3)), ('det', float)])
arr = np.zeros(1000, dtype=d).view(np.recarray)

您不必以recarray的身份查看,但是它允许访问结构化数组字段作为属性(即arr.Matrix将返回1000x3x3数组)。这很方便,因此您可以做类似的事情

arr.det = [det(a) for a in arr.Matrix] 

您还可以使用方括号符号和字段名称访问字段,该字段与Recarray或结构化数组一起使用。

arr['det'] = [det(a) for a in arr['Matrix']]