当数组包含字符串数据时,我对numpy有一些看似微不足道的麻烦.我有以下代码:
my_array = numpy.empty([1, 2], dtype = str)
my_array[0, 0] = "Cat"
my_array[0, 1] = "Apple"
Run Code Online (Sandbox Code Playgroud)
现在,当我打印时print my_array[0, :],我得到的回应是['C', 'A'],这显然不是Cat和Apple的预期输出.为什么会这样,我怎样才能获得正确的输出?
谢谢!
Bre*_*arn 45
Numpy要求字符串数组具有固定的最大长度.使用时创建空数组时dtype=str,默认情况下将此最大长度设置为1.你可以看看你是否这样做my_array.dtype; 它将显示"| S1",表示"单字符串".对数组的后续赋值将被截断以适合此结构.
您可以通过执行最大长度的显式数据类型,例如:
my_array = numpy.empty([1, 2], dtype="S10")
Run Code Online (Sandbox Code Playgroud)
"S10"将创建一个长度为10的字符串数组.您必须决定大到足以保存您想要保留的所有数据.
小智 9
当我尝试使用非ascii字符时,我收到了"编解码器错误" dtype="S10"
您还会得到一个包含二进制字符串的数组,这让我很困惑.
我认为最好使用:
my_array = numpy.empty([1, 2], dtype="<U10")
numpy字符串数组受其固定长度限制(默认长度为1).如果您不确定事先需要字符串的长度,可以使用dtype=object并获取数据元素的任意长度字符串:
my_array = numpy.empty([1, 2], dtype=object)
Run Code Online (Sandbox Code Playgroud)
我知道这种方法可能存在效率上的缺陷,但我没有很好的参考支持.