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 分箱算法 的相关文章

  • 用于查找最近邻居的空间划分算法如何工作?

    为了找到最近的邻居 空间分区 http en wikipedia org wiki Nearest neighbor search Space partitioning是算法之一 它是如何工作的 假设我有一组 2D 点 x 和 y 坐标 并
  • sigmoid 的导数

    我正在使用反向传播技术创建一个神经网络进行学习 我知道我们需要找到所使用的激活函数的导数 我正在使用标准 sigmoid 函数 f x 1 1 e x 我已经看到它的导数是 dy dx f x f x 1 f x 这可能是一个愚蠢的问题 但
  • 优化我的表现

    我正在开发一个使用 Zend Framework 1 11 Doctrine 2 一些 Symfony 2 组件以及其他工具和库的项目 我正在尝试使用 Xdebug 和 Webgrind 优化性能 我已经发现了一些瓶颈 例如解析 Ini 配
  • 数组所有可能的组合

    我有一个字符串数组 ted williams golden voice radio 我希望这些关键字的所有可能组合采用以下形式 ted williams golden voice radio ted williams ted golden
  • 密文窃取算法 - 哪一种是正确的?

    网络上提出了两种算法 在这两种算法中 第一部分是相同的 1 Pad the last partial plaintext block with 0 2 Encrypt the whole padded plaintext using the
  • Java 中旅行商问题的暴力算法

    我正在学校的数学课上做一个项目 我选择做旅行商问题 这是我一直想进行更多研究的问题 但是 我的暴力求解算法遇到了问题 请前往底部更新查看最新版本代码 如果您知道旅行推销员问题是什么 请跳过本段 尽可能概括地说 TSP 是这样的 您是一名推销
  • 从二叉堆中查找第 k 个最小元素的 O(klogk) 时间算法

    我们有一个 n 节点二叉堆 其中包含n不同的项目 根部的最小项目 为一个k lt n 发现O klogk 时间算法选择kth堆中的最小元素 O klogn 很明显 但无法找出O klogk 一 也许我们可以使用第二个堆 但不确定 好吧 你的
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • 1.2.840.113556.1.4.1941 (LDAP_MATCHING_RULE_IN_CHAIN) 存在性能问题?

    LDAP 搜索有一些内置规则 其中之一是LDAP MATCHING RULE IN CHAIN From MSDN https msdn microsoft com en us library aa746475 v vs 85 aspx 1
  • while循环的时间复杂度是多少?

    我正在尝试找出 while 循环的时间复杂度 但我不知道从哪里开始 我了解如何找到 for 循环的复杂性类别 但是当涉及到 while 循环时 我完全迷失了 关于从哪里开始有什么建议 提示吗 这是一个问题的示例 x 0 A n some a
  • 查找最接近点的多边形顶点的索引

    Heading 我需要找到最接近点的多边形的索引 所以在这种情况下 输出将是 4 和 0 这样 如果添加了红点 我就知 道将顶点放置在数组中的位置 有谁知道从哪里开始 抱歉 如果标题有误导性 我不知道如何正确表达它 In this case
  • 有向未加权图中的最长非循环路径

    什么算法可用于找到未加权有向无环图中的最长路径 动态规划 http en wikipedia org wiki Dynamic programming 它也被引用于最长路径问题 http en wikipedia org wiki Long
  • 如何实现n个元素的查找和插入操作的动态二分查找

    这个想法是使用多个数组 每个长度为 2 k 根据 n 的二进制表示来存储 n 个元素 每个数组都是排序的 不同的数组没有以任何方式排序 在上述数据结构中 SEARCH是通过对每个数组进行一系列二分查找来进行的 INSERT 是通过一系列相同
  • Wolfram Mathematica 中的 Sum[] 和 Sequence[]

    我需要评估可变数量集合的笛卡尔积的总和 假设 f 是多元函数 定义 p A set Module Alist args iterators it Alist A i 1 iterators it i Level 1 1 Alist args
  • Mathematica PlotMarkers 中标记的自定义间隔

    我试图在 Mathematica ListLinePlot 的同一个图中绘制多个列表 并使用 PlotMarkers 和 PlotLegend 包来获取最终数字 问题是 Mathematica 为每个点都放置了一个标记 这使得很难判断哪个标
  • 确定一组日期的事件重复模式

    我正在寻找一种模式 算法或库 它将采用一组日期并在退出时返回重复的描述 即集合 11 01 2010 11 08 2010 11 15 2010 11 22 2010 11 29 2010 会产生类似 十一月的每个星期一 的结果 有没有人以
  • Javascript树遍历算法

    我需要帮助以深度优先的方式遍历树结构 我无法想出一个算法来正确地做到这一点 我的输入是这样的 A B C 1 2 a b c d 输出应采用以下形式 A 1 a A 1 b A 1 c A 1 d A 2 a A 2 b A 2 c A 2
  • 先增后减的最长子序列

    我正在尝试解决以下问题 元素值先减小后增大的序列称为V序列 在有效的 V 序列中 递减臂中应至少有一个元素 递增臂中至少应有一个元素 例如 5 3 1 9 17 23 是一个有效的 V 序列 在递减臂中具有两个元素 即 5 和 3 在递增臂
  • cmd 和 workbench mysql 查询性能差异

    我有两个问题 正如我的标题 哪一个对于对大量数据运行大型查询更有效 我查看了 MySQL 文档 其中解释了工作台的性能https www mysql com products workbench performance https www
  • 检测 JSON 数组中没有重复项的最快正确方法是什么?

    我需要检查数组中的所有项目是否都是唯一的serde json Value 由于该类型没有实现Hash我想出了以下解决方案 use serde json json Value use std collections HashSet fn is

随机推荐

  • 使用 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 值由每个