通过自定义函数控制numpy如何转换类型

时间:2019-05-02 18:09:39

标签: python numpy oop types numpy-ndarray

当您对可迭代对象调用np.array时,它将尝试将所有对象强制转换为相同类型。因此,例如,一个可迭代的多个整数和一个浮点数将全部转换为浮点数。

>>> np.array([[1, 2],[3, 4.0]])
array([[1., 2.],
       [3., 4.]])

但是我想找到一种具有自定义类型的方法,这些类型定义了它们的类型转换。

本质上:

    class custom():

        def __init__(self, x):
            self.x = x

        def __as_numpy_value__(self): # This is the function I want!
            return f(self.x)

        def f(self):
            # some arbitrary tranformation of x
            # into a valid input for np.array

f(self)可以是单个值或列表...

class Expandable():
    def __as_numpy_value__(self):
        return [1,2,3]

>>> x = Expandable()
>>> np.array([x, x, x, [4, 5, 6]])
array([[1, 2, 3],
        [1, 2, 3],
        [1, 2, 3],
        [4, 5, 6]])

理想情况下,可以通过某种方法将方法简单地添加到类中。如果这需要子类化np.array(或其构造函数(?)),那也可以。

编辑:我想做的一些具体示例...

class SpecialFraction(fractions.Fraction):

    def __as_numpy_value__(self):
        return [self.numerator, self.denominator]

>>> np.array(SpecialFraction(1/2))
array([1,2])

class SpecialTuple(tuple):

    def __as_numpy_value__(self):
        np_val = []
        for x in self:
            if x is not None:
                np_val.append(x+0j)
            else:
                np_val.append(0+1j)
        return np_val

>>> np.array(SpecialTuple((None, 1)))
array([0+1j, 1+0j])

编辑:我的问题的最概括的版本

Numpy是否包括任何内置工具来自定义定义将用户定义的类型放入数组时的处理方式?

换句话说,...在现实生活中,有什么与我的幻想邓德方法__as_numpy_value__等效的东西。

0 个答案:

没有答案