gpt4 book ai didi

python - 将 unicode 元素读入 numpy 数组

转载 作者:太空狗 更新时间:2023-10-29 18:28:21 28 4
gpt4 key购买 nike

考虑一个名为“new.txt”的文本文件,其中包含以下元素:

μm
∂r
∆λ

在 Python 2.7 中,我可以通过键入以下内容来读取文件:

>>> import codecs
>>> f = codecs.open('new.txt', encoding='utf-8')
>>> lines = [line.strip() for line in f2.readlines()]
>>> lines
[u'\u03bcm', u'\u2202r', u'\u2206\u03bb']
>>> print lines[0]
μm

到目前为止一切顺利。我可以通过以下方式轻松地将此列表转换为 numpy 数组:

>>> import numpy as np
>>> arr = np.array(lines)
>>> arr
array([u'\u03bcm', u'\u2202r', u'\u2206\u03bb'],
dtype='<U2')

问题是,我无法通过 numpy 的 loadtxt 函数直接读取此文件:

>>> np.loadtxt('new.txt', dtype=np.unicode_)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/site-packages/numpy/lib/npyio.py", line 805, in loadtxt
X = np.array(X, dtype)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 0: ordinal not in range(128)

将此文件直接读入 numpy 的正确方法是什么?

谢谢。

最佳答案

在内存中,unicode 字符串表示为 UCS-2UCS-4 ,取决于您的 Python 解释器是如何编译的。您的文件编码为 UTF-8 ,因此您需要先对其进行重新编码,然后才能将其映射到 NumPy 数组。 loadtxt() 无法为您重新编码——毕竟 NumPy 主要针对数值数组。

假设每一行都有相同数量的字符,您还可以使用更高效的变体

s = codecs.open("new.txt", encoding="utf-8").read()
arr = numpy.frombuffer(s, dtype="<U3")

这将在字符串中包含换行符。要不包含它们,请使用

arr = numpy.frombuffer(s.replace("\n", ""), dtype="<U2")

编辑:如果您的文件的行长度不同并且您想避免中间列表,您可以使用

arr = numpy.fromiter(codecs.open("new.txt", encoding="utf-8"), dtype="<U2")

不过,我不确定这是否会在内部创建一些临时列表。

关于python - 将 unicode 元素读入 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6375343/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com