当前位置: 首页 > 面试题库 >

将unicode元素读入​​numpy数组

冀耀
2023-03-14
问题内容

考虑一个名为“ 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-2或UCS-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")

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



 类似资料:
  • 问题内容: 我有一个numpy数组,其中包含: 我想创建一个包含以下内容的数组: 也就是说,我想将第一个元素添加到数组的末尾。 我尝试了明显的方法: 但我说错了 我不明白这一点-数组都是一维数组。 问题答案: 创建一个新数组,该数组可以是带有附加元素的旧数组。 我认为使用适当的方法添加元素更为正常:

  • 主要内容:1. numpy.resize(),2. numpy.append(),3. numpy.insert(),4. numpy.delete(),5. numpy.argwhere(),6. numpy.unique()本节重点介绍 NumPy 数组元素的增删改查操作,主要有以下方法: 数组元素操作方法 函数名称 描述说明 resize 返回指定形状的新数组。 append 将元素值添加到数组的末尾。 insert 沿规定的轴将元素值插入到指定的元素前。 delete 删掉某个轴上的子数

  • 问题内容: 几年前从这个问题开始,在numpy中是否有规范的“移位”功能?我从文档中看不到任何东西。 这是我正在寻找的简单版本: 使用它就像: 这个问题来自于我昨天尝试[编写快速滚动产品的](http://codingdict.com/questions/163825尝试。我需要一种“转移”累积乘积的方法,我所能想到的就是在中复制逻辑。 因此比快得多。此版本的功能执行得更好: 更快的版本只是简单地

  • 问题内容: 在Python中,我们可以使用来获取数组中值的索引。 但是,当我尝试执行NumPy数组时: 我得到: AttributeError:“ numpy.ndarray”对象没有属性“ index” 我如何在NumPy数组上执行此操作? 问题答案: 使用来获得,其中一个给定的条件是指数。 例子: 对于称为的2D : 对于一维数组: 请注意,这也适用于像条件,,等等… 您也可以使用方法创建的子

  • 问题内容: 我不知道是否有一个CSV文件的内容导入到一个记录阵列直接的方式,很多的方式是的和家庭的进口数据与R的数据帧? 还是使用然后应用类似内容的最佳方法? 问题答案: 你可以通过将 设置为逗号来使用Numpy的方法。 有关该功能的更多信息,请参见其相应的文档。

  • 例如,对于 我想得到 有没有办法不用for循环或使用? 编辑:实际数据由1000行组成,每行100个元素,每个元素的范围从1到365。最终目标是确定有重复的行的百分比。这是一个作业问题,我已经解决了(用for循环),但我只是想知道是否有更好的方法来做它与Numpy。