我有这样的课程
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级吗?
答案 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]