gpt4 book ai didi

python - 对于 NumPy Unicode 数组,为什么 dtype '|U5' 变成 dtype '
转载 作者:行者123 更新时间:2023-12-05 04:35:36 34 4
gpt4 key购买 nike

我从这个答案的评论中了解到 Python: Numpy Data IO, how to save data by different dtype for each column?那<表示字节顺序,U表示unicode,5表示字符数。

然后'|'是什么在“|U5”中意味着“|”在下面的示例中更改为“<”?示例来自NumPy官方文档:https://numpy.org/devdocs/user/basics.io.genfromtxt.html

data = u"1, abc , 2\n 3, xxx, 4"
# Without autostrip
np.genfromtxt(StringIO(data), delimiter=",", dtype="|U5")

array([['1', ' abc ', ' 2'],
['3', ' xxx', ' 4']], dtype='<U5')

最佳答案

U数据类型将每个 Unicode 字符存储为 32 位整数(即 4 个字节)。超过一个字节的整数必须有字节顺序,因此数据类型将显示 <> . S 类型的数组将每个字符存储在一个字节中,因此字节顺序无关紧要,字节顺序字符将为 | .

例如这里a1a2包含单个 Unicode 字符。数组以相反的字节顺序创建。

In [248]: a1 = np.array(['π'], dtype='<U1')

In [249]: a2 = np.array(['π'], dtype='>U1')

In [250]: a1
Out[250]: array(['π'], dtype='<U1')

In [251]: a2
Out[251]: array(['π'], dtype='>U1')

检查每个数组中数据的实际字节数;您可以看到每种类型的不同顺序:

In [252]: a1.view(np.uint8)
Out[252]: array([192, 3, 0, 0], dtype=uint8)

In [253]: a2.view(np.uint8)
Out[253]: array([ 0, 0, 3, 192], dtype=uint8)

当您指定 | 时在创建数组时使用 Unicode 类型,显然 NumPy 会忽略它并使用 native 字节顺序,例如

In [254]: np.dtype("|U5")
Out[254]: dtype('<U5')

还不如根本不包括它:

In [255]: np.dtype("U5")
Out[255]: dtype('<U5')

关于python - 对于 NumPy Unicode 数组,为什么 dtype '|U5' 变成 dtype '<U5' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71012680/

34 4 0