2

例如。:

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_'>

    >>> 

总而言之,我想要么告诉编码器期望什么数据类型的输入,要么让 numpy.array() 表现得像 python 列表并保持不同的数据类型。

4

1 回答 1

1

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

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

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

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

于 2013-11-12T16:47:05.223 回答