Mathematica 快速 2D 分箱算法

2023-11-22

我在 Mathematica 中开发适当快速的分箱算法时遇到一些麻烦。我有一个很大的(~100k 元素)数据集,其形式为 T={{x1,y1,z1},{x2,y2,z2},....} 我想将其分入大约 100x100 个 bin 的 2D 数组中,bin 值由每个 bin 中的 Z 值之和给出。

目前,我正在迭代表的每个元素,使用 Select 根据 bin 边界列表挑选出它应该位于哪个 bin,并将 z 值添加到占用该 bin 的值列表中。最后,我将 Total 映射到 bin 列表上,对它们的内容求和(我这样做是因为我有时想做其他事情,比如最大化)。

我曾尝试使用 Gather 和其他此类函数来执行此操作,但上述方法速度快得离谱,尽管也许我使用 Gather 的效果不佳。无论如何,按照我的方法进行排序仍然需要几分钟,我觉得 Mathematica 可以做得更好。有人有一个方便的高效算法吗?


这是一种基于 Szabolcs 帖子的方法,速度大约快一个数量级。

data = RandomReal[5, {500000, 3}];
(*500k values*)
zvalues = data[[All, 3]];

epsilon = 1*^-10;(*prevent 101 index*)
(*rescale and round (x,y) coordinates to index pairs in the 1..100 range*)
indexes = 1 + Floor[(1 - epsilon) 100 Rescale[data[[All, {1, 2}]]]];

res2 = Module[{gb = GatherBy[Transpose[{indexes, zvalues}], First]}, 
    SparseArray[
     gb[[All, 1, 1]] -> 
      Total[gb[[All, All, 2]], {2}]]]; // AbsoluteTiming

给出大约 {2.012217, Null}

AbsoluteTiming[
 System`SetSystemOptions[ 
  "SparseArrayOptions" -> {"TreatRepeatedEntries" -> 1}];
 res3 = SparseArray[indexes -> zvalues];
 System`SetSystemOptions[ 
  "SparseArrayOptions" -> {"TreatRepeatedEntries" -> 0}];
 ]

给出大约 {0.195228, Null}

res3 == res2
True

"TreatRepeatedEntries" -> 1 添加重复位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mathematica 快速 2D 分箱算法 的相关文章

  • 如何从二叉搜索树中均匀随机地返回节点?

    给定一个 BST 可能平衡也可能不平衡 如何能够均匀地随机返回 任何 节点 一个限制是您不能使用外部索引数据结构 您必须以每个节点都有平等被访问的机会的方式遍历树 这个问题让我困惑了好一阵子 如果我们确实可以使用外部哈希表 指针 我们可以对
  • gcc 不太可能使用宏

    我正在编写一段关键代码 其逻辑大致如下 if expression is true do something with extremely low latency before the nuke blows up This branch i
  • 为什么 cross_val_predict 比 KNeighborsClassifier 的拟合慢得多?

    在 Jupyter 笔记本上本地运行并使用 MNIST 数据集 28k 条目 每个图像 28x28 像素 以下内容为27秒 from sklearn neighbors import KNeighborsClassifier knn clf
  • C 中的菱形数组排序

    我有以下 C 语言作业 我基本上需要一种方法而不是解决方案 我们有一个 13 x 13 的数组 在数组中 我们有一个需要考虑的菱形形状 该菱形之外的所有内容都初始化为 1 不重要 下面的 5 x 5 数组示例 x x 1 x x x 2 2
  • 使用FFT算法计算

    给定在平面上的点 1 0 2 0 n 0 上发现的一组 n 个粒子电荷载流子 在 i 0 点发现的粒子电荷记为 Qi 作用在粒子上的力由以下公式给出 C is a Coulomb s constant 给出一个算法来计算 Fi 对于总复杂度
  • 将嵌套循环计算转换为 Numpy 以加速

    我的Python程序的一部分包含以下代码段 其中一个新的网格 是根据旧网格中找到的数据计算的 网格是二维浮点数列表 该代码使用了三个 for 循环 for t in xrange 0 t step for h in xrange 1 hei
  • 32 位数字中 1 的数量

    我正在寻找一种在 32 位数字中包含 1 数量的方法 之间不使用循环 任何人都可以帮助我并向我提供代码或算法吗 这样做 提前致谢 See Integer bitCount int http java sun com javase 6 doc
  • 为什么 Orchard 在执行内容项查询时如此慢?

    假设我想查询所有 Orchard 用户 ID 并且还想包括那些已被删除 也称为软删除 的用户 该数据库包含大约 1000 个用户 Option A 大约需要 2 分钟 Orchard ContentManagement IContentMa
  • 将嵌套字典中的所有键从camelCase转换为snake_case

    我有一本类似这样的字典 firstName abc lastName xyz favoriteMovies Star Wars The lone ranger favoriteCountries country China capitalC
  • 双端队列与队列速度

    我正在研究 LeetCode 上的一个问题 Here https leetcode com problems moving average from data stream 当我完成这个问题后 我想出了 class MovingAverag
  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • HTML5 Canvas 性能:加载图像与绘图

    我正计划使用 javascript canvas 编写一个游戏 我只有一个问题 在加载图像与仅使用 canvas 的方法进行绘图方面 我应该考虑什么样的性能考虑因素 因为我的游戏将使用非常简单的几何图形 圆形 正方形 直线 所以任何一种方法
  • 增量SQL查询

    我的应用程序有一组固定的 SQL 查询 这些查询以轮询模式运行 每 10 秒一次 由于数据库的大小 gt 100 GB 和设计 超级规范化 我遇到了性能问题 每当数据库上发生更改查询结果的 CRUD 事件时 是否可以对给定查询进行增量更改
  • 寻找距离原点最近的 100 颗恒星的算法

    首先让我提出正确的问题 问 有一个文件包含超过一百万个点 x y 每个点代表一颗星星 a b 处有一颗行星地球 现在 任务是构建一种算法 返回距离地球最近的 100 颗恒星 您的算法的时间和空间复杂度是多少 这个问题在各种采访中被问过很多次
  • 快速搜索压缩文本文件

    我需要能够在大量压缩文件 txt 中搜索文本 压缩可能会改变为其他东西 甚至成为专有的 我想避免解压所有文件并压缩 编码 搜索字符串并在压缩文件中搜索 这应该可以通过对所有文件使用相同的码本使用霍夫曼压缩来实现 我不想重新发明轮子 所以 任
  • 哪个更快:堆栈分配或堆分配

    这个问题听起来可能相当简单 但这是我与另一位合作的开发人员进行的辩论 我小心翼翼地在可能的地方进行堆栈分配 而不是堆分配它们 他一边跟我说话 一边看着我 并评论说没有必要 因为他们的表现是一样的 我总是有这样的印象 堆栈的增长是恒定的时间
  • 字符串与 StringBuilder

    我理解之间的区别String and StringBuilder StringBuilder是可变的 但是两者之间有很大的性能差异吗 我正在开发的程序有很多大小写驱动的字符串附加 500 正在使用StringBuilder更好的选择 是的
  • Array.indexOf 如何比 Array.some 更高效

    这个问题的灵感来自于这个问题的竞争答案 具有多个参数的indexOf https stackoverflow com questions 39000151 indexof with multiple arguments 用户想知道一种有效的

随机推荐

  • 使用 Google Maps Javascript API v3 的 HTML/CSS 标记

    我们公司刚刚从 Leaflet js 迁移到 Google Maps API 我四处搜寻 试图找到一个simple将 HTML CSS 标记 框作为叠加层集成到 Google Maps Javascript API v3 中的方法 到目前为
  • SVG:Drop-Shadow 滤镜在移动 Safari 上对 SVG 进行像素化

    我在 SVG 文件中使用投影滤镜 该文件使用img标签 在我的 MacBook 上 Safari 浏览器看起来不错 然而 在移动版 Safari 中 图形变得非常像素化并失去了所有清晰度 未应用滤镜时 SVG 渲染效果良好 除了通过过滤器之
  • 如何将此 Python 2.7 代码转换为 Python 3?

    以下代码适用于 Python 2 7 将局部变量动态注入到函数作用域中 myvars var 123 def func exec locals update myvars print var func assert var not in g
  • 如何将一个 Git 存储库变基到另一个 Git 存储库?

    我有一个 Git 存储库 A 其中包含项目到某一时刻的开发情况 然后我丢失了这个存储库 A 所在的 USB 记忆棒 幸运的是 我有最新提交的备份 因此我可以稍后创建一个新的存储库 B 在其中导入最新项目的状态并继续开发 现在我恢复了丢失的
  • Java 正则表达式单词边界

    您好 我有以下代码 旨在查找单词 is 但当它位于另一个字符串中时则不查找 因此单词 this 不应返回匹配项 因此我使用 b 但下面的代码没有找到匹配项 我不明白为什么 public static void main String arg
  • QObject::startTimer:定时器只能与以 QThread 启动的线程一起使用

    我试图在工作线程事件循环中启动计时器 但收到此错误 QObject startTimer Timers can only be used with threads started with QThread 这有什么问题吗 include
  • CI 环境中 Maven 项目的 GPG 密钥保存在哪里?

    我正在尝试使用maven gpg 插件 标志为了在部署到 Sonatype OSS 存储库之前对项目工件进行签名 问题是我应该在哪里保存我的密钥secring gpg 在持续集成中 gnupg目录 在项目源代码中 例如src test re
  • 为什么右方括号“]”不需要在正则表达式中转义?

    考虑数组 new Pattern Pattern compile Pattern compile Intellij IDEA 告诉我 是多余的 并告诉我将其替换为 例如结果是 new Pattern Pattern compile Patt
  • 如何使用 Three.js 和 jsonLoader 制作加载屏幕?

    我有大量的纹理文件和模型要加载到我的项目中 我试图在所有内容加载时显示状态栏或某种加载屏幕 如果有人能给我任何关于如何做到这一点的信息 那就太棒了 Thanks 所需的最低代码如下 THREE DefaultLoadingManager o
  • 我如何处理帆中的独特场?

    我在模型中定义了一个独特的字段 但是当我尝试测试时 似乎它没有被帆检查 因为我得到了一个Error E UNKNOWN Encountered an unexpected error MongoError E11000 duplicate
  • 更改 TabWidget 中的文本颜色和选择器

    I ve a TabWidget 独立于 actionBar in aFragmentTabHost 我想定制的外观和感觉TabWidget但我不明白 我的目的是更改文本颜色和选择器颜色 正如您在图像中看到的那样 我可以更改文本的背景Tab
  • css 浮动及其堆栈顺序

    我正在回顾之前学过的 float 属性 我发现了一个关于浮动元素及其自己的堆叠顺序的简单问题 代码如下 示例1 box 1 background teal width 100px height 100px float left div cl
  • 有没有办法在正则表达式中执行动态替换?

    有没有办法在 C 4 0 中使用匹配中包含的文本函数进行正则表达式替换 在php中有这样的东西 reg replace hello world yay s randomfunction 0 它为每场比赛提供独立的结果 并在找到每场比赛的地方
  • “DS:[40207A]”在汇编中是什么意思?

    0040103A CALL DWORD PTR DS 40207A USER32 MessageBoxA 什么是DS mean 该指令正在从内存加载新的 EIP 值ds 40207A 即地址处有一个函数指针40207A 它推送一个返回地址
  • 将内容插入 iFrame

    我试图将一些内容插入到 空白 iFrame 中 但是没有插入任何内容 HTML JS iframe ready function var doc iframe contentWindow document var body text Tes
  • Kendo-ui MVC PopUp 编辑器:如何隐藏字段

    我正在使用 Kendo ASP NET MVC 我想对编辑表单进行一些控制 我想做的事情 隐藏我的 ID 字段 将我的属性代码和平方英尺更改为常规 TextBoxFor 字段 将购买日期和销售日期更改为 Kendo DatePickerFo
  • 使用 Comet/XMPP 与 Microsoft 堆栈上的 WebSocket 技术进行实时 Web 通知和更新的选项?

    我正在为一个项目确定架构选项 该项目将呈现用户活动 登录 照片等 的实时更新 如 Facebook 该项目的两个主要 UI 组件是一个自动更新滚动区域 其中将列出新通知 照片 等 以及一个将更新消息计数等内容的工具栏 其竞争者是基于 Jab
  • 仅允许大写和小写字母

    我只想接受用户的小写和大写字母 我尝试了下面的代码 它回显了无效字符消息 但不起作用 我的意思是它不检查 它只是显示消息 有什么帮助吗
  • d3.js 中折叠/展开树的子节点?

    我正在构建一个树结构 或者更确切地说 使用我自己的 json 中的一组数据修改其中一个示例 并且我正在尝试创建一些功能 我的树的布局是树示例中的布局 http mbostock github com d3 ex cluster html 我
  • Mathematica 快速 2D 分箱算法

    我在 Mathematica 中开发适当快速的分箱算法时遇到一些麻烦 我有一个很大的 100k 元素 数据集 其形式为 T x1 y1 z1 x2 y2 z2 我想将其分入大约 100x100 个 bin 的 2D 数组中 bin 值由每个