首页 > 解决方案 > numpy数组的一些问题

问题描述

li = np.array(list("123"))
li[0] = "fff"
print(li)

打印['f' '2' '3']而不是['fff' '2' '3']。为什么这样?我该如何调整/修复它?

标签: pythonarraysnumpy

解决方案


为什么这样?

一些调试将在这里有所帮助。以第一行为例:

>>> li = np.array(list("123"))

那是什么li

>>> li
array(['1', '2', '3'], dtype='<U1') 

请注意 , 的数据类型,li文档解释说此数据类型用于长度为 1 的 unicode 字符串。根据您在构造函数中提供的元素,为您选择了此类型,以便它可以分配内存并可能做一些后台优化。<U1numpyli

当你这样做时会发生什么li[0] = "fff",因为"fff"不是长度为 1 的 unicode 字符串?然后,numpy将转换"fff"为长度为 1 的 unicode 字符串,在这种情况下,它似乎是"f".

>>> li[0] = "fff"
>>> li
array(['f', '2', '3'], dtype='<U1')

现在print输出应该是有意义的。

该怎么办

您可以在构造数组时显式传递数据类型。例如

>>> li = np.array(list("123"), dtype="<U3")
>>> li
array(['1', '2', '3'], dtype='<U3')
>>> li[0] = "fff"
>>> li
array(['fff', '2', '3'], dtype='<U3')

当然,您必须提前决定数组的真正类型,在这种情况下,您可以拥有的字符串的最大长度为 3。

如果您不能保证数组中的类型,请考虑使用 alist而不是 anumpy.array作为数据结构。


推荐阅读