将Python类转换为Numpy数组

3
我能帮您翻译这段内容:

我可以将一个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])

在最后一步,我希望得到一个数组np.array([X.x, X.y]),但实际上我得到了array(X(x=0, y=0), dtype=object)
我能否为dataclass提供方法,使强制转换按照预期工作(或重载dataclass的现有方法)?

尝试添加 def __iter__(self): yield from (self.x, self.y) - undefined
感谢你的建议 @AzatIbrakov!我确实尝试过,但没有成功。也许我定义的方式不对。你能提供一个完全详细的答案吗? - undefined
1
这只是基于直觉的错误建议,阅读了numpy.array的文档字符串后,很明显你可以像这样定义__array__方法:def __array__(self): return np.array([self.x, self.y]) - undefined
谢谢 @AzatIbrakov!这真的很有帮助。你想写个答案让我接受吗? - undefined
1个回答

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])

并且它将被 np.array 使用。我想这对于任何自定义的Python类都应该有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接