例如:
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列表类似,并保留不同的数据类型。
答案 0 :(得分:1)
Python的数组不是像C一样的数组,而是一个指向包含所放入数据的对象的指针数组。对象保留了自己的类型信息,而python很高兴,因为真正的数组是统一的(所有指针)。
另一方面,Numpy会获取您的数据并更改其类型,以便所有内容都是相同的类型。在这种情况下,它们都变为string,因为你给它至少一个字符串。所以你不应该像你引用的那样使用numpy数组(作为编码器的输入向量),而是使用python数组。如果您正在讨论编码器列表,您可以向编码器询问其类,并告诉您它所期望的数据类型(针对接受字符串/类别的编码器基类的测试可能会这样做)。
在NuPIC中,MultiEncoder.encoders数组是一个python数组,而不是一个numpy数组。