我正在尝试重现使用numpy.histogram2d构造2D直方图时遇到的现象,特别是在使用“ bins”参数时。当我对bins参数使用整数时(例如bins = 20),我会看到预期的2D直方图。但是,我希望直方图具有大小一致的容器,因此我想创建带有设置的最小和最大x值和y值的直方图。目前,我正在使用numpy.linspace创建bin分区,以获取均等值的数组。
x_bins = np.linspace(min_range, max_range, num=num_bins+1) #numpy is imported as np
y_bins = np.linspace(0, max_even, num=num_bins+1)
我将这些数组用于numpy.histogram2d中的bins参数。
hist, xedges, yedges = np.histogram2d(x, y, bins=(x_bins, y_bins))
x和y数组是介于min_range和max_range的值之间(对于x),以及介于0和max_even(对于y)之间的数字数组。当我使用数组定义垃圾箱时,我生成的某些直方图全为零。所有x和y数组的长度都是相同的,我唯一能想到的变化就是输入numpy.histogram2d的数字范围。 在这些x和y范围内的数字产生的直方图不全为零:
x:最小范围= 0.07,最大范围= 142.095; y:0,max_even = 471.64
x:最小范围= 0.218,最大范围= 195.178; y:0,max_even = 1493.489这些范围内的数字会产生全零的直方图:
x:最小范围= 0.006,最大范围= 6.916; y:0,max_even = 1.101
x:最小范围= 0,最大范围= 5.58; y:0,max_even = 1.205
x和y数组都是numpy数组。打印出x和y箱和值表明所有x和y值都应落入已定义的箱中。尝试用感兴趣范围内的随机值数组复制错误未成功,因此,我对缺少示例表示歉意;欢迎提出任何复制建议。是什么导致histogram2d函数返回全零的直方图?
编辑
我尝试使用histogram2d的range参数定义最小和最大x和y值,并对bins参数使用整数(下面的代码)。这对全零的直方图没有影响。
hist, xedges, yedges = np.histogram2d(x, y, bins=10, range=[[min_range, max_range], [0, max_even]])
答案 0 :(得分:0)
以下是将生成零数组的情况。如果通过轴交换范围参数或重复使用范围参数,则可能会生成带有某些x和y数组的零的二维直方图。
import numpy as np
np.random.seed(100)
x = 5*np.random.rand(40)+5.
y = 3*np.random.rand(40)+10.
x_min = x.min()
x_max = x.max()
y_min = y.min()
y_max = y.max()
np.histogram2d( x , y, bins = [ 5, 3 ], range = [[ x_min, x_max ], [ x_min, x_max ]])
# x_min & x_max both times!!
# (array([[0., 0., 0.],
# [0., 0., 0.],
# [0., 0., 0.],
# [0., 0., 0.],
# [0., 0., 0.]]),
# array([5.02359428, 5.99979628, 6.97599828, 7.95220028, 8.92840228, 9.90460429]),
# array([5.02359428, 6.65059762, 8.27760095, 9.90460429]))
# Corrected version
np.histogram2d( x , y, bins = [ 5, 3 ], range = [[ x_min, x_max ], [ y_min, y_max ]])
# (array([[5., 5., 2.],
# [1., 4., 3.],
# [0., 3., 2.],
# [2., 0., 1.],
# [5., 5., 2.]]),
# array([5.02359428, 5.99979628, 6.97599828, 7.95220028, 8.92840228, 9.90460429]),
# array([10.0613174 , 11.01588476, 11.97045212, 12.92501948]))