【发布时间】:2014-01-28 00:27:30
【问题描述】:
numpy.histogram(data, bins) 是一种非常快速有效的方法来计算数据数组中有多少元素落入由数组 bins 定义的 bin 中。是否有等效功能可以解决以下问题?我有一个 R 行乘以 C 列的矩阵。我想使用 bins 给出的定义对矩阵的每一行进行 bin 处理。结果应该是一个包含 R 行且列数等于 bin 数的矩阵。
我尝试使用函数 numpy.histogram(data, bins) 作为输入矩阵,但我发现矩阵被视为具有 R*C 元素的数组。然后,结果是一个包含 Nbins 个元素的数组。
【问题讨论】:
-
也;我们可以退后一步吗?很可能你并不真的需要 np.histogram,但更简单但更快的计算就足够了。你的更大目标是什么?
-
您好 Eelco,感谢您的提问。我正在尝试编写一个非常快速的代码来管理数据系列。我的矩阵中每一行的每个系列。我在到达最终系列之前进行了一些操作。与我的预期相反,我发现在循环中为每一行执行所有这些操作比在整个矩阵上逐个执行操作要慢得多。现在,在这些操作结束时,我想对每个数据系列进行分类。尽管如此,我还没有找到避免
for循环将它们装箱的方法。 -
目前,我的代码运行时间为 8 秒,其中 5 秒用于分箱。如果我可以将分箱时间减少到其他单个操作的时间(np.histogram 正是我现在使用的方式,我惊讶地发现它将矩阵视为平面数组,而不是保持其结构。当然,正如你所说,如果有更简单但更快的方法,那就太好了。
-
如果您真的需要分箱,那并不能真正回答;但正如我在下面问的,你确定循环是问题吗?也许分箱本身就是那么昂贵;毕竟,它比大多数标准算术数组操作要昂贵得多。 Bi Rico 的解决方案显然更慢的事实表明可能是这种情况,因为该代码对我来说似乎非常优化。我唯一能想到的是,也许你有很多非常短的行,在这种情况下可能存在更优化的解决方案。
-
我刚刚在下面回答了你的问题。目前,我正在处理每个具有 ~10E4 个元素的数据系列。
标签: python arrays numpy matrix binning