我有一套我想用numpy对待的数据。可以将数据看作空间中的一组点,并使用我想作为对象处理的附加属性变量。取决于一组数据,向量可以是长度1,2或3,但对于给定数据集中的所有点而言长度相同。属性对象是一个自定义类,对于任何两个给定的点可能都是相同的。作为一个非唯一属性的向量的numpy数组
因此,将此数据视为一个随机示例(C和H表示包含Carbon或Hydrogen的原子属性的对象...或仅包含一些随机对象)。这些不会通过文件读入,而是通过算法创建。这里的C对象可以是相同的,也可以是不同的(例如同位素)。
Example 3D data set (just abstract representation)
C 1 2 3
C 3 4 5
H 1 1 4
我想有一个包含所有原子位置的,这样我可以执行像numpy的矢量操作和如翻译功能def translate(data,vec):return data + vec
操作的numpy的阵列。我也想平行处理属性对象。一种选择是对两个都有两个单独的数组,但是如果我删除了一个元素,我也必须显式删除属性数组值。这可能难以处理。
我认为使用numpy.recarray
x = np.array([(1.0,2,3, "C"), (3.0,2,3, "H")], dtype=[('x', "float64"),('y',"float6
4 “),( 'Z',” float64" ),( '类型',对象)])
但似乎此数组的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
)?我还简要地考虑过编写一个扩展为ndarray
的数组对象,但我觉得这可能是不必要的,并且可能是灾难性的。
任何想法或建议将是非常有益的。
谢谢!这正是我一直在寻找的。它向右滑过我,你可以改变其中一个结构的尺寸。 – scicalculator 2013-03-03 22:49:00