自定义类列表转换为numpy数组

时间:2019-06-05 22:20:33

标签: python numpy

我有这样的课程

class Point:
    def __init__(self, x,y,z):
        self.x = x
        self.y = y
        self.z = z

其中x,y,z为float

我想这样做:

p = Point(0,0,0)
arr_p = np.array(p)
arr_pts = np.array([p])

我期望什么:

>>> arr_p
array([0., 0., 0.])
>>> arr_pts
array([[0., 0., 0.]])

都拥有dtype=np.float64

如何自定义班级以实现这一目标?

我尝试过的方法: 我在numpy.array中看到了一些评论

        object : array_like
            An array, any object exposing the array interface, an object whose
            __array__ method returns an array, or any (nested) sequence.

所以我只是添加了

    def __array__(self):
        return [self.x, self.y, self.z]

但是它不起作用。...我不知道array是什么意思,我们需要管理内存布局的是C级吗?

1 个答案:

答案 0 :(得分:1)

您可以定义__len____getitem__方法:

class Point:
    def __init__(self, x,y,z):
        self.x = x
        self.y = y
        self.z = z

    def __len__(self):
        return 3

    def __getitem__(self, idx):
        return (self.x, self.y, self.z)[idx]