当用一个字符检查字符串的数据类型时,我得到的 dtype 为 <U1 符合预期。
print(numpy.array(["a"]).dtype)
Output : <U1
但是在向数组添加一个整数后,为什么它会消耗 21 个字符?
print(numpy.array([1,"a"]).dtype)
Output : <U21
当用一个字符检查字符串的数据类型时,我得到的 dtype 为 <U1 符合预期。
print(numpy.array(["a"]).dtype)
Output : <U1
但是在向数组添加一个整数后,为什么它会消耗 21 个字符?
print(numpy.array([1,"a"]).dtype)
Output : <U21
因为元素正在被提升,这意味着 numpy 将元素转换为
type1 和 type2 可以安全地转换为的最小尺寸和最小标量类型。
例如,如果我们使用promote_types:
print(np.promote_types('i8', '<U1'))
输出
<U21
关于 U21,它由两部分组成,如您所知,U 表示 Unicode,21 表示它可以容纳的元素数量,请参阅此答案的更多信息。
因此,8可以转换为 int64,并且它可以容纳至少 20 个字符(尽管取决于平台),它正在转换为 U21。知道一个数字可以包含的字符数,您可以执行以下操作:
ii64 = np.iinfo(np.int64)
print(ii64)
输出
Machine parameters for int64
---------------------------------------------------------------
min = -9223372036854775808
max = 9223372036854775807
---------------------------------------------------------------
尤其:
print(len(str(ii64.min)))
输出
20
您可以通过以下方式保留 U1:
print(np.array(["a", 1]).dtype) # put the string first
输出
<U1
在这个 GitHub问题上查看更多信息。