我有一组我想用 numpy 处理的数据。可以将数据视为空间中的一组点,并带有我想作为对象处理的附加属性变量。根据一组数据,向量的长度可能为 1、2 或 3,但对于给定数据集中的所有点,其长度相同。属性对象是一个自定义类,对于任何两个给定点都可能相同。
因此,将此数据视为一个随机示例(C 和 H 表示包含碳或氢的原子属性的对象......或只是一些随机对象)。这些不会通过文件读取,而是由算法创建。这里的 C 对象可能相同,也可能不同(例如同位素)。
Example 3D data set (just abstract representation)
C 1 2 3
C 3 4 5
H 1 1 4
我想要一个包含所有原子位置的 numpy 数组,这样我就可以执行 numpy 操作,如矢量操作和翻译函数def translate(data,vec):return data + vec
。我还想并行处理属性对象。一种选择是为两者设置两个单独的数组,但如果我删除一个元素,我也必须显式删除属性数组值。这可能很难处理。
我考虑过使用numpy.recarray
x = np.array([(1.0,2,3, "C"), (3.0,2,3, "H")], dtype=[('x', "float64" ),('y',"float6
4"),('z',"float64"), ('type', object)])
但似乎shape
这个数组的 是(2,)
,这意味着每条记录都是独立处理的。此外,我似乎无法理解如何让矢量操作与这种类型一起工作:
def translate(data,vec):return data + vec
translate(x,np.array([1,2,3]))
...
TypeError: unsupported operand type(s) for +: 'numpy.ndarray' and 'numpy.ndarray'
我numpy.recarray
应该使用什么?有没有更好的方法以更简单的方式处理这个问题,例如我有一个单独的点数值矩阵和一个平行object
数组,如果元素被删除(np.delete
),它们会链接起来?我还简要地考虑过编写一个 extends 的数组对象ndarray
,但我觉得这可能是不必要的并且可能是灾难性的。
任何想法或建议都会非常有帮助。