Skip to main content
 首页 » 编程设计

python之使用 MultiEncoder,我有一个数组 encoders[],我想知道编码器接受什么数据类型。这怎么可能

2025年05月04日11telwanggs

例如:

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 列表并保留不同的数据类型。

请您参考如下方法:

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

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

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

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