将具有不同大小的行的数据加载到 Numpy 数组中

2024-05-10

假设我有一个包含如下数据的文本文件:

1  2  3  4  5
6  7  8 
9  10 11 12 13 14
15 16 17 18 19

如何将它加载到 numpy 数组中,使其看起来像这样?

[1  2  3  4  5  0
 6  7  8  0  0  0
 9  10 11 12 13 14
 15 16 17 18 19 0 ]

到目前为止,我一直使用的方法包括逐行读取文本文件,将每一行附加到列表中,找到最大长度的行并相应地填充剩余的行。

有人能建议一种更有效的方法吗?

非常感谢!


填充列表列表可以通过多种方式完成,但由于您已经从文件中读取此内容,我认为itertools.zip_longest将是一个好的开始。

In [201]: txt = """1  2  3  4  5
     ...: 6  7  8 
     ...: 9  10 11 12 13 14
     ...: 15 16 17 18 19"""

读取并解析文本行:

In [202]: alist = []
In [203]: for line in txt.splitlines():
     ...:     alist.append([int(i) for i in line.split()])
     ...:     
In [204]: alist
Out[204]: [[1, 2, 3, 4, 5], [6, 7, 8], [9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]

zip_longest(此处以 PY3 形式)采用填充值:

In [205]: from itertools import zip_longest
In [206]: list(zip_longest(*alist, fillvalue=0))
Out[206]: 
[(1, 6, 9, 15),
 (2, 7, 10, 16),
 (3, 8, 11, 17),
 (4, 0, 12, 18),
 (5, 0, 13, 19),
 (0, 0, 14, 0)]
In [207]: np.array(_).T
Out[207]: 
array([[ 1,  2,  3,  4,  5,  0],
       [ 6,  7,  8,  0,  0,  0],
       [ 9, 10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19,  0]])

zip(*)也可用于“转置”列表列表:

In [209]: list(zip(*alist1))
Out[209]: 
[(1, 2, 3, 4, 5, 0),
 (6, 7, 8, 0, 0, 0),
 (9, 10, 11, 12, 13, 14),
 (15, 16, 17, 18, 19, 0)]

我猜你正在做类似的事情:

In [211]: maxlen = max([len(i) for i in alist])
In [212]: maxlen
Out[212]: 6
In [213]: arr = np.zeros((len(alist), maxlen),int)
In [214]: for row, line in zip(arr, alist):
     ...:     row[:len(line)] = line
     ...:     
In [215]: arr
Out[215]: 
array([[ 1,  2,  3,  4,  5,  0],
       [ 6,  7,  8,  0,  0,  0],
       [ 9, 10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19,  0]])

这对我来说看起来不错。

一位普通的发帖者 Divakar 喜欢发布一个使用以下方法的解决方案:cumsum。让我们看看我是否可以重现它。它涉及构造一个一维掩码,其中非零值应该位于其中。逆向工作,我们需要一个像这样的掩码:

In [240]: mask=arr.ravel()>0
In [241]: mask
Out[241]: 
array([ True,  True,  True,  True,  True, False,  True,  True,  True,
       False, False, False,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True, False], dtype=bool)

以便:

In [242]: arr.flat[mask] = np.hstack(alist)

这个映射有一个我还没有完全内化的技巧!


诀窍是广播长度[0,1,2,3,4,5]:

In [276]: lens=[len(i) for i in alist]
In [277]: maxlen=max(lens)
In [278]: mask=np.array(lens)[:,None]>np.arange(maxlen)
In [279]: mask
Out[279]: 
array([[ True,  True,  True,  True,  True, False],
       [ True,  True,  True, False, False, False],
       [ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True, False]], dtype=bool)
In [280]: arr = np.zeros((len(alist), maxlen),int)
In [281]: arr[mask] = np.hstack(alist)
In [282]: arr
Out[282]: 
array([[ 1,  2,  3,  4,  5,  0],
       [ 6,  7,  8,  0,  0,  0],
       [ 9, 10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19,  0]])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将具有不同大小的行的数据加载到 Numpy 数组中 的相关文章

  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di

随机推荐