初始化字符串d的numpy数组的怪异行为

2024-03-29 04:38:13 发布

您现在位置:Python中文网/ 问答频道 /正文

当数组包含字符串数据时,我在numpy上遇到了一些看似微不足道的问题。我有以下代码:

my_array = numpy.empty([1, 2], dtype = str)
my_array[0, 0] = "Cat"
my_array[0, 1] = "Apple"

现在,当我用print my_array[0, :]打印它时,得到的响应是['C', 'A'],这显然不是Cat和Apple的预期输出。为什么,我怎么才能得到正确的输出?

谢谢!


Tags: 数据字符串代码numpyapplemy数组array
3条回答

numpy字符串数组受其固定长度(默认长度为1)的限制。如果您不确定预先需要字符串的长度,可以使用dtype=object,并为数据元素获取任意长度的字符串:

my_array = numpy.empty([1, 2], dtype=object)

我知道这种方法可能存在效率缺陷,但我没有很好的参考资料来支持这一点。

当我试图将非ascii字符与dtype="S10"一起使用时,出现了“编解码器错误”

你还得到了一个带二进制字符串的数组,这让我很困惑。

我认为最好使用:

my_array = numpy.empty([1, 2], dtype="<U10")

Numpy要求字符串数组具有固定的最大长度。使用dtype=str创建空数组时,默认情况下,它会将此最大长度设置为1。您可以查看是否执行my_array.dtype;它将显示“| S1”,意思是“一个字符串”。数组中的后续赋值将被截断以适合此结构。

通过执行以下操作,可以传递具有最大长度的显式数据类型:

my_array = numpy.empty([1, 2], dtype="S10")

“S10”将创建一个长度为10个字符串的数组。你必须决定有多大才能容纳所有你想保存的数据。

相关问题 更多 >