gpt4 book ai didi

从序列内部正确转换为 ndarray 的 Numpy 可转换类?

转载 作者:行者123 更新时间:2023-12-01 11:17:53 26 4
gpt4 key购买 nike

__array__方法允许自定义类型自动转换为 numpy.例如。,

>>> class Convertible:
... def __array__(self):
... return np.zeros(7)
>>> np.array(Convertible())
array([ 0., 0., 0., 0., 0., 0., 0.])

不幸的是, __array__如果自定义类型出现在序列中,则不起作用:
>>> np.array([Convertible(), Convertible()])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: float() argument must be a string or a number, not 'Convertible'

有没有办法修复 Convertible以便转换 Convertible 的序列使用 np.array 进行 numpy 的对象与转换每一个然后转换结果 ndarrays的序列相同?

最佳答案

它必须是一个序列。
numpy.array takes

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



当您调用 numpy.arrayConvertible例如,您遇到了“ __array__ 方法返回数组的对象”的情况。当您在敞篷车列表中调用它时,您将遇到“任何(嵌套)序列”的情况。类型推断逻辑似乎正在使用 __array__您在确定新数组的 dtype 时定义的方法,但在那之后,由于您的对象不提供序列协议(protocol),NumPy 假定您的对象应直接转换为整数。

实现 __len____getitem__ , 你应该可以转换 [Convertible(), Convertible()]到一个数组。 NumPy 将使用序列协议(protocol)而不是 __array__但是,当您这样做时,这将涉及比您可能想要的更多的 Python 方法调用。除了直接 numpy.array 之外,您还必须做一些事情。如果您想防止这种情况,请调用。

关于从序列内部正确转换为 ndarray 的 Numpy 可转换类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48349929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com