
NumPy 中直接使用 dtype=str 会默认创建长度为 1 的 Unicode 字符串数组,导致赋值时被截断;需显式指定足够大的固定长度(如 <U10)或使用 object 类型以支持变长字符串。
numpy 中直接使用 `dtype=str` 会默认创建长度为 1 的 unicode 字符串数组,导致赋值时被截断;需显式指定足够大的固定长度(如 ` 在 NumPy 中声明字符串数组时,一个常见误区是直接使用 dtype=str。例如: 输出结果中 'ddd' 被截断为 'd',这是因为 dtype=str 实际等价于 dtype='<U1'(即长度为 1 的小端 Unicode 字符串),每个元素仅预留 1 个字符空间。 ✅ 正确做法有两种: 方法一:指定足够大的固定长度(推荐用于同构字符串场景) ? 类型说明:'<U{n}' 中 < 表示小端序(通常可省略),U 表示 Unicode,{n} 是最大字符数(非字节数)。若不确定长度,可设为保守值(如 <U100)。 方法二:使用 dtype=object(适用于长度差异大或含复杂对象) ⚠️ 注意事项: 总结:永远不要依赖 dtype=str 声明可变长字符串数组——明确指定 <U{n} 或选用 object 类型,才能确保语义准确与数据完整。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)
使用显式的 Unicode 字符串类型,如 <U10(支持最多 10 个 Unicode 字符):x = np.empty([row_length, col_length], dtype='<U10')
x[1, 2] = 'ddd'
x[0, 0] = 'hello'
print(x)
# 输出:
# [['hello' '' '']
# ['' '' 'ddd']
# ['' '' '']
# ['' '' '']
# ['' '' '']]
该类型不限制字符串长度,但牺牲向量化性能与内存连续性:x = np.empty([row_length, col_length], dtype=object)
x[1, 2] = 'ddd'
x[2, 1] = 'a very long string indeed'
print(repr(x[2, 1])) # 完整输出,无截断

















