Python 混合浮点数和字符串的不一致数据类型推断 np.array([5.3,1.2,76.1,'Alice','Bob','Claire']))

Python 混合浮点数和字符串的不一致数据类型推断 np.array([5.3,1.2,76.1,'Alice','Bob','Claire'])),python,numpy,numpy-dtype,Python,Numpy,Numpy Dtype,我想知道为什么这会给出一个dtype=U32的数据类型,而下面的代码给出了一个U6的数据类型 np.array(['Alice','Bob','Claire',5.3,1.2,76.1]) Numpy试图通过计算存储对象所需的位数来提高存储数据类型的效率 import np a = np.array([5.3, 1.2, 76.1, 'Alice', 'Bob', 'Claire']) b = np.array(['Alice', 'Bob', 'Claire', 5.3, 1.2, 76.1]

我想知道为什么这会给出一个dtype=U32的数据类型,而下面的代码给出了一个U6的数据类型

np.array(['Alice','Bob','Claire',5.3,1.2,76.1])

Numpy试图通过计算存储对象所需的位数来提高存储数据类型的效率

import np
a = np.array([5.3, 1.2, 76.1, 'Alice', 'Bob', 'Claire'])
b = np.array(['Alice', 'Bob', 'Claire', 5.3, 1.2, 76.1])
print(a.dtype, b.dtype)

>>> <U32 <U6
导入np
a=np.数组([5.3,1.2,76.1,'Alice','Bob','Claire']))
b=np.数组(['Alice','Bob','Claire',5.3,1.2,76.1])
打印(a.D类型,b.D类型)

>>>“Numpy看到5.3并将其放入32码点数据类型的数据类型”与“Numpy继续前进并看到5.3,也可以放入6码点数据类型”相比令人惊讶。你可能是对的,它正在发生,但这并没有深入探讨原因。
np.array
是一个编译函数,所以我们不能很容易地了解它在做什么。我们只能从结果中猜测。它可能是基于初始值进行猜测,并在遇到新值时对猜测进行细化。初始数字,浮点数或整数,会产生更长的字符数据类型。但为什么要担心呢?在内存很重要的情况下,不应该使用这种类型的数组构造。请尝试
np.array([np.int32(2),'alice'])
和其他数据类型。
U
长度随
int/uint
大小而变化,但浮动似乎都会产生
U32
。显然,一些开发人员选择了它作为一个安全值,并且没有人费心去改进这个选择。