首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy histogram2d产生奇怪的结果

numpy histogram2d产生奇怪的结果
EN

Stack Overflow用户
提问于 2018-02-20 22:25:05
回答 1查看 136关注 0票数 0

我正在尝试使用numpy histogram2d函数。我生成一些随机数据,如下所示:

代码语言:javascript
复制
import numpy as np

np.random.seed(0)
img = np.random.uniform(low=2.0, high=65.0, size=(400, 400))

因此,数据介于0和65之间。我有我自己的hostogram函数,它会产生如下所需的结果:

代码语言:javascript
复制
def compute_histogram2d(r, w, bins):
    jh = np.zeros(bins)
    jh_flat = jh.ravel(order='K')

    ref_data = r.ravel(order='K')
    war_data = w.ravel(order='K')

    num_nodes = r.shape[0] * r.shape[1]

    for i in range(num_nodes):
        index = (int(ref_data[i]) + (int)(war_data[i]) * bins[0])
        jh_flat[index] += 1.0

    return jh

因此,我将值转换为整数,然后在直方图中递增该值。

我可以称之为计算对角线直方图。

代码语言:javascript
复制
jh = compute_histogram2d(img, img, (68, 68))

我正在尝试获得与numpy histogram2D相同的结果。因此,我执行以下操作:

代码语言:javascript
复制
jh2 = np.histogram2d(np.trunc(img.ravel(order='K')).astype(np.int32),
                 np.trunc(img.ravel(order='K')).astype(np.int32),
                 bins=(bins, bins))[0]

下面是这两个直方图中的前几个条目(第一列是我自己的函数,第二列是numpy)。这些文件打印为:

代码语言:javascript
复制
for i in range(68):
    print (jh[i, i], jh2[i, i])


0.0      2522.0
0.0      2507.0
2522.0   2558.0
2507.0   2615.0
2558.0   2555.0
2615.0   2519.0
2555.0   2627.0
2519.0   2551.0
2627.0   2585.0
2551.0   2490.0
2585.0   2531.0
2490.0   0.0    <---- Some zeros appear
2531.0   2528.0
2528.0   2557.0
2557.0   2493.0
2493.0   2509.0
2509.0   2608.0
2608.0   2516.0

因此,正如您所看到的,numpy列似乎发生了移动。取值范围在2到65之间。因此,在我自己的实现中,前两个值是0.0,这是正确的,但是numpy实现为(0, 0)(1, 1)生成了非零值。此外,一些零也出现在对角线上,而它不应该出现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-20 22:33:10

我想通了。我需要指定range参数,否则事情会被截断为异常值。

所以使用如下代码:

代码语言:javascript
复制
jh2 = np.histogram2d(np.trunc(img.ravel(order='K')).astype(np.int32),
                     np.trunc(img.ravel(order='K')).astype(np.int32),
                     bins=(bins, bins),
                     range=[[0, bins], [0, bins]])[0]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48887439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档