【问题标题】:Representing particle motion in numpy在 numpy 中表示粒子运动
【发布时间】:2018-09-10 19:51:59
【问题描述】:

我从来没有使用numpy 来表示超过imagesvolumetric data 我会对它们运行操作。无论如何,numpy 适合存储表格还是更适合在 pandas 上完成?

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

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

任何建议表示赞赏。

【问题讨论】:

    标签: python numpy


    【解决方案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] 
    

    您还可以使用括号表示法和字段名称访问字段,这适用于重新数组或结构化数组。

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

    【讨论】:

    • 非常感谢这个例子,我试试看
    • 如果我这样做 arr = np.rec.array(np.ones(1000, dtype=d)) 有效,并且我可以访问 arr.det 我是否需要视图?
    • @user1767754,这对我来说是一种新方法,但它确实有效。我已经更新了使用 np.zeros 的答案,使用数组有一个错字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    相关资源
    最近更新 更多