簡體   English   中英

如何在python中獲取2D直方圖的每個bin中的最大值

[英]How to get the maximum in each bin of a 2D histogram in python

我正在使用numpy,尤其是histrogram2d函數。 我正在用2d直方圖對點(數組xyz )的3D空間分布進行分箱。 對於每個點,我都有一個關聯的密度場d

如果我那樣做

import numpy as np
H, xedges, yedges = np.histogram2d(x,y,bins=200,weights=d)

直方圖H代表沿視線的密度之和(在這種情況下為z軸)。 考慮到我正在處理非常大的數組,這是非常快速和容易的。

現在,我想走得更遠,而不是沿視線繪制密度的總和,我想在每個2D倉中獲得最大的密度。 我編碼了可能的解決方案:

from numpy import *
x=array([0.5,0.5,0.2,0.3,0.2,0.25,0.35,0.6,0.1,0.22,0.7,0.45,0.57,0.65])
y=array([0.5,0.5,0.28,0.18,0.85,0.9,0.44,0.7,0.1,0.22,0.7,0.45,0.54,0.65])
d=array([1,1,2,2,3,5,6,8,7,9,6,10,5,7])

bins=linspace(0,1,64)

idx=digitize(x,bins) 
idy=digitize(y,bins) 

img2=zeros((len(bins),len(bins)))

for i in arange(0,len(d)):
  dummy=idx[i]
  dummy2=idy[i]
  img2[dummy][dummy2]=max(d[i],img2[dummy][dummy2])

但是,對於龐大的數據集,最后幾行中的循環可能真的很慢。 關於如何使它更快的任何想法?

這是我的操作方法,很抱歉,我現在沒有時間編寫代碼:

  1. 使用numpy.ravel_multi_index將2d問題變成1d問題。
  2. 看一下numpy.unique的實現,您想要執行類似的操作以獲取唯一的bin值,但是您想要以某種方式進行操作,以便它同時為您提供d的最小值/最大值。 numpy.lexsort在這里也可能會有所幫助。
  3. 要移回二維空間,它應該像img2.flat[uniq_1d_bin_value] = bin_max這樣簡單

我希望這足以讓您入門。 如果遇到問題,可以發布代碼並告訴我們您遇到的困難,也許我或其他人可以幫助您再次走上正確的道路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM