【发布时间】:2011-12-31 23:57:29
【问题描述】:
我在 Mathematica 中开发适当快速的分箱算法时遇到了一些麻烦。我有一个大型(~100k 元素)数据集的形式 T={{x1,y1,z1},{x2,y2,z2},....} 我想将它分箱成一个大约 100x100 箱的二维数组,箱值由落入每个箱的 Z 值的总和给出。
目前我正在遍历表的每个元素,使用 Select 根据 bin 边界列表选择它应该在哪个 bin 中,并将 z 值添加到占据该 bin 的值列表中。最后,我将 Total 映射到 bin 列表,对它们的内容求和(我这样做是因为我有时想做其他事情,比如最大化)。
我曾尝试使用 Gather 和其他此类功能来执行此操作,但上述方法速度快得离谱,尽管我可能使用 Gather 很差。无论如何,按照我的方法进行排序仍然需要几分钟,我觉得 Mathematica 可以做得更好。有没有人手边有一个很好的高效算法?
【问题讨论】:
-
请发布您已经在使用的代码,否则很难知道是否有解决方案,例如
Gather其实是一种改进。 -
让我看看我是否有这个权利:您是通过相应的 X 和 Y 值对 Z 值进行分级,对吗?
-
x,y,z是实数还是整数?如果z是整数,可能有更简单的方法:BinCounts[Join @@ (ConstantArray[{#1, #2}, #3] & @@@ data)] -
@Szabolcs,我不明白你上面的评论。
-
@Mr.Wizard 我的意思是 如果
z的意思是某物的“计数”,那么我们不妨将每个条目乘以z倍和使用内置的快速BinCounts函数。
标签: performance algorithm wolfram-mathematica bin binning