The __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
numpy 的对象np.array
与转换每个值然后转换结果序列相同ndarrays
?
它必须是一个序列。
numpy.array
takes https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.array.html
数组,任何暴露数组接口的对象,其__array__
方法返回一个数组或任何(嵌套)序列。
你打电话时numpy.array
on a Convertible
例如,你正在击中“一个物体,其__array__
方法返回一个数组”情况。当您在可转换列表上调用它时,您会遇到“任何(嵌套)序列”情况。类型推断逻辑似乎正在选取__array__
您在确定新数组的 dtype 时定义的方法,但之后,由于您的对象不提供序列协议,NumPy 假定您的对象应直接转换为整数。
实施__len__
and __getitem__
,你应该能够转换[Convertible(), Convertible()]
到一个数组。 NumPy 将会use序列协议而不是__array__
但是,当您这样做时,将涉及比您可能想要的更多的 Python 方法调用。你必须做一些除了直接的事情之外的事情numpy.array
如果您想阻止这种情况,请致电。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)