如何声明字符串NumPy数组?赋值长字符串仅显示单个字符的问题与解决
问题
代码如下:
import numpy as np row_length = 5 col_length = 3 x = np.empty([row_length,col_length],dtype=str) x[1,2]='ddd' print(x)
运行结果:
[['' '' ''] ['' '' 'd'] ['' '' ''] ['' '' '']]
预期结果:
[['' '' ''] ['' '' 'ddd'] ['' '' ''] ['' '' '']]
原因分析
在numpy中,指定dtype=str时,默认会创建长度为1的Unicode字符串数组(等价于dtype='U1')。这种数组的每个元素仅能容纳1个字符,所以赋值'ddd'时会被自动截断为第一个字符'd'。
解决方法
有两种常用的处理方式:
- 指定固定长度的字符串类型:创建数组时明确设置字符串的最大长度,比如要存储3个字符就用
dtype='U3',修改后代码如下:import numpy as np row_length = 5 col_length = 3 x = np.empty([row_length,col_length],dtype='U3') x[1,2]='ddd' print(x) - 使用
object类型:如果不确定字符串长度,或需要存储任意长度的字符串,可以用dtype=object,此时数组元素会存储字符串对象,不会出现截断。代码如下:
注意:import numpy as np row_length = 5 col_length = 3 x = np.empty([row_length,col_length],dtype=object) x[1,2]='ddd' print(x)object类型数组会丢失numpy部分矢量化操作的性能优势,更适合字符串长度差异较大的场景。
内容的提问来源于stack exchange,提问作者user2155362
相关产品推荐
相关产品推荐

