我从未使用过numpy
来代表images
或volumetric 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
任何建议表示赞赏。
答案 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']]