python - numpy数组的一些问题
问题描述
li = np.array(list("123"))
li[0] = "fff"
print(li)
打印['f' '2' '3']
而不是['fff' '2' '3']
。为什么这样?我该如何调整/修复它?
解决方案
为什么这样?
一些调试将在这里有所帮助。以第一行为例:
>>> li = np.array(list("123"))
那是什么li
?
>>> li
array(['1', '2', '3'], dtype='<U1')
请注意 , 的数据类型,li
文档解释说此数据类型用于长度为 1 的 unicode 字符串。根据您在构造函数中提供的元素,为您选择了此类型,以便它可以分配内存并可能做一些后台优化。<U1
numpy
li
当你这样做时会发生什么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
作为数据结构。
推荐阅读
- reactjs - 用打字稿反应useState(仅一个变量)
- python - 如何从 json 对象中检索特定数据并添加到新数组中
- wordpress - 如何减少 wordpress 网站中的 ttfb 时间?
- java - Maven 在编译阶段连接文本文件
- python-3.x - 使用 Python 更改 YAML 中的特定变量
- python - 如何在 scapy 中构造 CIP 列表身份请求?
- amazon-cloudformation - 将 Lambda Arn 获取到资源中:类型:AWS::Lambda::Permission
- cucumber - 使用 cypress-cucumber-preprocessor 将现有的 cypress 测试转换为黄瓜风格的 bdd。第二个场景没有被选中
- mysql - oracle和mysql之间的数据传输
- c# - Visual Studio 2019 - 构建花费的时间比他们应该的要长得多