将 Numpy 数组转换为稀疏字典的最快方法?

2023-12-28

我有兴趣尽快将 numpy 数组转换为稀疏字典。让我详细说明一下:

给定数组:

numpy.array([12,0,0,0,3,0,0,1])

我希望制作字典:

{0:12, 4:3, 7:1}

正如您所看到的,我们只是将序列类型转换为从非零索引到其值的显式映射。

为了使这更有趣,我提供了以下测试工具来尝试替代方案:

from timeit import Timer

if __name__ == "__main__":
  s = "import numpy; from itertools import izip; from numpy import nonzero, flatnonzero; vector =         numpy.random.poisson(0.1, size=10000);"

  ms = [ "f = flatnonzero(vector); dict( zip( f, vector[f] ) )"
             , "f = flatnonzero(vector); dict( izip( f, vector[f] ) )"
             , "f = nonzero(vector); dict( izip( f[0], vector[f] ) )"
             , "n = vector > 0; i = numpy.arange(len(vector))[n]; v = vector[n]; dict(izip(i,v))"
             , "i = flatnonzero(vector); v = vector[vector > 0]; dict(izip(i,v))"
             , "dict( zip( flatnonzero(vector), vector[flatnonzero(vector)] ) )"
             , "dict( zip( flatnonzero(vector), vector[nonzero(vector)] ) )"
             , "dict( (i, x) for i,x in enumerate(vector) if x > 0);"
             ]
  for m in ms:
    print "  %.2fs" % Timer(m, s).timeit(1000), m

我正在使用泊松分布来模拟我有兴趣转换的数组类型。

这是我到目前为止的结果:

   0.78s f = flatnonzero(vector); dict( zip( f, vector[f] ) )
   0.73s f = flatnonzero(vector); dict( izip( f, vector[f] ) )
   0.71s f = nonzero(vector); dict( izip( f[0], vector[f] ) )
   0.67s n = vector > 0; i = numpy.arange(len(vector))[n]; v = vector[n]; dict(izip(i,v))
   0.81s i = flatnonzero(vector); v = vector[vector > 0]; dict(izip(i,v))
   1.01s dict( zip( flatnonzero(vector), vector[flatnonzero(vector)] ) )
   1.03s dict( zip( flatnonzero(vector), vector[nonzero(vector)] ) )
   4.90s dict( (i, x) for i,x in enumerate(vector) if x > 0);

正如你所看到的,我找到的最快的解决方案是

n = vector > 0;
i = numpy.arange(len(vector))[n]
v = vector[n]
dict(izip(i,v))

有什么更快的办法吗?

编辑: 步骤

i = numpy.arange(len(vector))[n]

看起来特别笨拙——在仅选择某些元素之前生成整个数组,特别是当我们知道可能只选择大约 1/10 的元素时。我想这方面还有待改进。


>>> a=np.array([12,0,0,0,3,0,0,1])
>>> {i:a[i] for i in np.nonzero(a)[0]}
{0: 12, 4: 3, 7: 1}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Numpy 数组转换为稀疏字典的最快方法? 的相关文章

随机推荐

  • 在 _Layout.cshtml 中将 Layout 设置为 null

    您是否有理由希望在 Layout cshtml 中将 Layout 属性设置为 null 比如像这样 在渲染body view之前 section Layout null RenderBody section 对我来说这似乎很荒谬 删除行设
  • 扩展 Angular 2 ngModel 指令以使用可观察量

    角2ngModel指令适用于变量和函数 例如
  • 类型约束“XYZ”已创建

    我想用一个Moose Util TypeConstraints https metacpan org pod Moose Util TypeConstraints在我的应用程序中 所以我在我的main pl main pl use Moos
  • 使用Java锁定屏幕

    基本上我只需要创建一个应用程序 具有某种用户访问权限 其第一个屏幕是一个全屏窗口 如果不输入有效的用户名和密码 则无法最小化或关闭该窗口 类似于 Windows 屏幕保护程序 能做到吗 我应该查看哪些图书馆 这就是我所需要的 如果我的问题不
  • 将数值列表映射到颜色

    我有一个数值列表 如果需要的话我可以标准化这些值 我需要将此列表转换为颜色列表 在 HSL RGB 或任何其他颜色模型中 我可以稍后进行转换 对于任何给定值 颜色每次都必须相同 两个给定数值越不同 对应值的对比度就应该越大 所有使用的颜色必
  • JavaFX:控制器可以是抽象类吗?

    我已经研究这部分代码一天了 只是无法弄清楚为什么它总是生成错误 我有一个控制器和 FXML 他们工作得很好 然后我想到我想通过抽象 updateSelect 函数重用这个特定的控制器 因此 我将控制器更改为抽象 代码编译得很好 直到我尝试运
  • ARC 子类上的超级释放

    在 ARC 中我知道你不会打电话 super dealloc 在任何覆盖 dealloc 所以通常我会删除其中的观察者和计时器而不这样做 但是 如果我要对我制作的发布观察信息的视图进行子类化 dealloc不打电话 super deallo
  • 实体框架继承:按类型排序/分组?

    实体框架 以及我使用它的 RIA 服务 很好地支持继承 数据库映射可以是单表或多表 并且在第一种情况下 数据库表包括包含类型指示符的指示符列 显然 这个指示符在模型中是不可见的 尽管人们希望使用它来进行排序和分组 如果这是我想要做的 我是否
  • 强制 JFrame 在 setResizable(false) 之后不调整大小。命令不起作用

    我有一个简单的 Atari 突破程序 长话短说 我的一个功能是允许用户调整窗口大小几秒钟 然后再次使窗口不可调整大小 一切正常 窗口从不可调整大小 到可调整大小几秒钟 应该发生的情况是 几秒钟后 窗口应该停止接受用于调整窗口大小的输入 即
  • 使用 Google App Engine 在 Android 中推送通知

    我目前正在开发一个应用程序 用户可以在其中创建存储在服务器上的帖子 当另一个用户通过单击按钮对帖子表现出兴趣时 我想使用推送通知来通知帖子的作者 我已经使用 Google App Engine 的云端点设置了数据存储 无论如何 我可以使用这
  • Android 监听来自服务器套接字的消息

    我正在尝试创建一个通过套接字与本地服务器通信的 Android 应用程序 通信使用 JSON 以字符串形式传递简单的命令和数据 客户端应不断侦听来自服务器的传入消息 并在收到新数据时更新用户界面 所以我创建了一个网络服务 它是一个在后台运行
  • platform 和 api 这两个词到底是什么意思?

    我买了一本 学习java SE 6平台 的书 我想知道平台这个词的真正含义是什么 因为它不只是我可以使用的一堆类 Netbeans 中 Libraries 下的 JDK 1 6 节点 什么是API 这和平台不是一回事吗 但是库不是同样的意思
  • 多重采样和片段着色器

    多重采样似乎不适用于片段着色器生成的片段 在下面的示例中 片段着色器用于生成棋盘程序纹理 正方形的外边缘已正确抗锯齿 但程序纹理的内边缘却未正确抗锯齿 片段着色器是否仅针对每个像素进行评估 或者给定像素的每个片段的纹理坐标是否相同 下面是代
  • 单行 if 语句中的语法错误

    我是 UNIX 上的 python 脚本新手 我正在尝试创建一个目录 但它会导致以下错误 gt gt gt import os sys gt gt gt path u home user exist gt gt gt if not os p
  • Joi 嵌套架构

    我正在尝试在 joi 中创建嵌套架构 但它抛出错误 错误 对象模式不能是 joi 模式 var nestedSchema joi object b joi number var base joi object a joi string ne
  • 是否可以使用 NativeScript 显示用 SwiftUI 编写的 View

    我目前正在通过桥接标头使用本机 Swift 代码 但不是像视图这样的东西 是否可以通过本机脚本代码中的某些事件触发器呈现用 Swift 编写的视图 None
  • 不允许通过 REST api 和 jquery 405 方法创建 Jira 问题

    当使用以下 jquery 调用时 我收到 http 405 method not allowed 错误消息 有人知道如何解决这个问题吗 是https的原因吗 我也尝试使用 GET 和 PUT 类型 得到相同的结果 function make
  • 是否可以在 Java 代理中使用 WEB-INF 目录中的 Java 类

    目前我正忙于一个全新的 XPage 项目 我使用 Java 和托管 Bean 来访问数据 到目前为止 我不必使用 Lotusscript 最后一件事是创建一个计划代理来执行一些后端工作 Java 类中已经存在一些逻辑 这些类位于 WEB I
  • 在 ViewController 中重新加载/刷新选项卡栏项目?

    我正在尝试更改 ViewController 中选项卡栏的图像 但要显示新图像 我必须单击每个选项卡栏项目 for CustomTabBarItem myItem in self tabBarController tabBar items
  • 将 Numpy 数组转换为稀疏字典的最快方法?

    我有兴趣尽快将 numpy 数组转换为稀疏字典 让我详细说明一下 给定数组 numpy array 12 0 0 0 3 0 0 1 我希望制作字典 0 12 4 3 7 1 正如您所看到的 我们只是将序列类型转换为从非零索引到其值的显式映