将 Python 类转换为 Numpy 数组

fab*_*ian 3 python numpy python-3.x python-dataclasses

我可以将 python 类转换为 numpy 吗array

from dataclasses import dataclass
import numpy as np
@dataclass
class X:
    x: float = 0
    y: float = 0
x = X()
x_array = np.array(x) # would like to get an numpy array np.array([X.x,X.y])
Run Code Online (Sandbox Code Playgroud)

在最后一步中,我想获得一个数组np.array([X.x, X.y])。相反,我得到了array(X(x=0, y=0), dtype=object)

我可以提供 的方法,dataclass以便根据需要进行转换(或重载 的现有方法之一dataclass)吗?

Aza*_*kov 5

文档字符串中numpy.array我们可以看到第一个参数的要求

object:array_like

数组、公开数组接口的任何对象、其__array__方法返回数组的对象或任何(嵌套)序列。

所以我们可以定义一个__array__类似的方法

@dataclass
class X:
    x: float = 0
    y: float = 0

    def __array__(self) -> np.ndarray:
        return np.array([self.x, self.y])
Run Code Online (Sandbox Code Playgroud)

它将被使用np.array。我猜这应该适用于任何自定义 Python 类。