我正在尝试编写一个直方图构建器来为我的作业构建一个二维直方图。这是[我的代码] [1]:
def Build2DHistogramClassifier(X1,X2,T,B,x1min,x1max,x2min,x2max):
HF=np.zeros((B,B),dtype='int');#initialising a empty array of integer type
HM=np.zeros((B,B),dtype='int');
bin_row_indices=(np.round(((B-1)*(X1-x1min)/(x1max-x1min)))).astype('int32');"""this logic decides which bin the value goes into"""
bin_column_indices=(np.round(((B-1)*(X2-x2min)/(x2max-x2min)))).astype('int32');"""np.round-->applies the formula to all the values in the array"""
for i,(r,c) in enumerate(zip(bin_row_indices, bin_column_indices)):
"""enumerate-->if we put array or list into it gives output with index/count i """
if T[i]=='Female':
HF[r,c]+=1;
else:
HM[r,c]+=1;
return [HF, HM]
但问题是我得到的结果(每个bin中的计数)与numpy中使用hist2d函数得到的结果不匹配(我传递了相同的bin大小)
如果我的代码格式不正确,我很抱歉。请点击我使用相同代码创建的要点的超链接。
我的代码中有什么错误?
我该如何纠正?
感谢
答案 0 :(得分:0)
通过在分配到垃圾箱时进行舍入,您将垃圾箱视为垃圾箱中心。 numpy惯例是将它们用作bin边缘。
从您的代码中移除对round()
的两次调用,并将B-1
更改为B
。您现在应该使用您的函数和np.histogram2d
得到相同的结果。