[英]Python equivalent of Matlab's hist3
for i=1:n
centersX(:,i)=linspace(min(xData)+dX/2,max(xData)-dX/2,nbins)';
centersY(:,i)=linspace(min(yData)+dY/2,max(phase)-dY/2,nbins)';
centers = {centersX(:,i),centersY(:,i)};
H(:,:,i) = hist3([xData yData],centers);
end
在每次迭代中,我用linspace
函數構造centersX
和centersY
。 我然后將它們存儲在一個名為2×1單元陣列centers
。 H 是一個 nbins X nbins X n 結構。 在每次迭代中,我用來自 hist3 的數據填充 H 的 nbins X nbins 切片。
我正在尋找 Python 等價物。 我在傳遞numpy.histogram2d
的參數時numpy.histogram2d
:
H[:,:,i] = numpy.histogram2d(xData,yData,centers)
我收到以下錯誤:
Traceback (most recent call last):
line 714, in histogramdd
N, D = sample.shape
AttributeError: 'list' object has no attribute 'shape'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
line 36, in <module>
H[:,:,i] = numpy.histogram2d(xData, yData, centers)
line 714, in histogram2d
hist, edges = histogramdd([x, y], bins, range, normed, weights)
line 718, in histogramdd
N, D = sample.shape
ValueError: too many values to unpack (expected 2)
由於 Python 沒有元胞數組,我將中心更改為數組數組,其中centers[0] = centersX
centers[1] = centersY
centers[0] = centersX
和centers[1] = centersY
我需要更改什么,以便假設輸出將匹配的 matlab 和 python 之間的數據相同?
編輯:我也試過H[:,:,i] = numpy.histogram2d(xData,yData, bins=(centersX,centersY))
將合並步驟切入centers
但沒有運氣。
你試過用方括號組合它們嗎?
也許你也可以使用matplotlib.pyplot.hist2d 。
H[:,:,i], *_ = numpy.histogram2d(xData,yData,bins=[centers[0], centers[1]])
H[:,:,i], *_ = matplotlib.pyplot.hist2d(xData,yData,bins=[centers[0], centers[1]])
在這兩種情況下,中心的值是 bin 邊緣,而不是中心。 您必須調整計算。 我認為刪除dX/2就足夠了:
centersX(:,i)=linspace(min(xData),max(xData),nbins)';
centersY(:,i)=linspace(min(yData),max(phase),nbins)';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.