【发布时间】:2020-05-04 12:33:58
【问题描述】:
我有一个 2D uint16 numpy 数组,我想计算这个数组的直方图。 我使用的功能是:
def calc_hist(source):
hist = np.zeros(2**16, dtype='uint16')
for i in range(source.shape[0]):
for j in range(source.shape[1]):
hist[source[i, j]] = hist[source[i, j]] + 1
return hist
此函数执行时间过长。 据我了解,numpy 模块中有一个直方图函数,但我不知道如何使用它。 我试过了:
hist,_ = np.histogram(source.flatten(), bins=range(2**16))
但我得到的结果与我自己的函数不同。 如何调用 numpy.histogram 来获得相同的结果?还是有其他选择?
【问题讨论】:
-
您能否添加数据样本!
-
您能否修复您发布的代码以使其实际工作?
-
它有效,你可以随机化一个 uint16 二维数组..
-
不,它没有。剪下问题中的代码,将其粘贴到文件或 IDE 中并尝试运行它。即使您修复了
zeroes,代码中仍然存在不平衡的括号 -
您的代码使用准确的数字,因此它始终是范围 (0, 2^16-1)。 numpy 直方图默认为范围 (a.min(), a.max()),然后拆分为 num 个 bin。您可能需要明确地给它(浮点)范围(0, 2^16)以获得相似的结果......
标签: python performance numpy histogram