python - 为什么 np.array([1, "a"]) 使用 21 个字符的 Unicode 字符串?
问题描述
当用一个字符检查字符串的数据类型时,我得到的 dtype 为 <U1 符合预期。
print(numpy.array(["a"]).dtype)
Output : <U1
但是在向数组添加一个整数后,为什么它会消耗 21 个字符?
print(numpy.array([1,"a"]).dtype)
Output : <U21
解决方案
为什么要消耗 21 个字符?
因为元素正在被提升,这意味着 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问题上查看更多信息。
推荐阅读
- javascript - 优化添加类的查询选择器列表
- yocto - nmap 版本 7.60 无法与 yocto 版本 2.4 (rocko) 一起编译
- c# - UWP 中的包不兼容
- git - 在 GIT 提交字段中设置默认消息
- asp.net-mvc - 将数组绑定到Angular中的表
- python - 使用 fabric 或 paramiko 快速导入数据
- gcc - 列出 GAS 中支持的指令集?
- javascript - 组件之间的绑定 ExtJS
- symfony - 灾难恢复后访问 Drupal 8 网站时出现 AccessDeniedHttpException
- c++ - 使用 VBO 和 VAO 是否会提高具有共享内存的集成芯片的性能