簡體   English   中英

Python 相當於 Matlab 的 hist3

[英]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函數構造centersXcentersY 我然后將它們存儲在一個名為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] = centersXcenters[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.

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