使用MultiEncoder,我有一个数组encoders [],我希望能够告诉编码器接受什么数据类型。怎么可能?

时间:2013-11-12 16:29:09

标签: python numpy nupic

例如:

encoders = {SDRCategoryEncoder, ScalarEncoder} 
do_magic_and_answer_me_type(encoders[0]) // I want string
do_magic_and_answer_me_type(encoders[1]) // int   (or python equivalents)

更长:我问的原因是,python的列表行为正确,并保留各种元素的数据类型,而numpy数组转换为常见类型。

    >>>a=[1, 'sweet', 2]
    >>>type(a)
    type 'list'>

    >>> type(a[0])
    type 'int'>

    >>> type(a[1])
    type 'str'>

    >>> import numpy
    >>> na = numpy.array(a)
    >>> type(na)
    type 'numpy.ndarray'>

    >>> type(na[0])
    type 'numpy.string_'>

    >>> type(na[1])
    type 'numpy.string_'>

    >>> 

总而言之,我想告诉编码器期望输入的数据类型,或者 make numpy.array()的行为与python列表类似,并保留不同的数据类型。

1 个答案:

答案 0 :(得分:1)

Python的数组不是像C一样的数组,而是一个指向包含所放入数据的对象的指针数组。对象保留了自己的类型信息,而python很高兴,因为真正的数组是统一的(所有指针)。

另一方面,Numpy会获取您的数据并更改其类型,以便所有内容都是相同的类型。在这种情况下,它们都变为string,因为你给它至少一个字符串。所以你不应该像你引用的那样使用numpy数组(作为编码器的输入向量),而是使用python数组。

如果您正在讨论编码器列表,您可以向编码器询问其类,并告诉您它所期望的数据类型(针对接受字符串/类别的编码器基类的测试可能会这样做)。

在NuPIC中,MultiEncoder.encoders数组是一个python数组,而不是一个numpy数组。