use*_*929 4 python matlab histogram
我试图将一些Matlab代码转换为Python,并且Matlab代码如下所示:
[N,X] = hist(Isb*1e6, -3:0.01:0)
Run Code Online (Sandbox Code Playgroud)
其中Isb是一个2048000元素的1D阵列.N作为301元素1D阵列输出.
我的Python代码如下:
import numpy as np
N,X = np.histogram(Isb*1e6,np.array(-3,0.01,0.01))
Run Code Online (Sandbox Code Playgroud)
但是N Python输出是一个300元素的1D数组,其中Matlab N的最后一个元素没有了.
有没有办法复制Matlab更准确的内容?
我需要N和X相同的大小,以便我可以这样做:
loc = X < -0.75
I = N[loc].argmax()
Run Code Online (Sandbox Code Playgroud)
请注意,在matlab中hist(x, vec),vec区分bin- center ,而在matlab中,histc(x, vec)vec定义了柱状图的bin-edge.Numpy的直方图似乎适用于边缘.这种差异对你很重要吗?它应该很容易从一个转换为另一个,你可能需要Inf在bin-edge的末尾添加一个额外的东西,以使它返回你想要的额外bin.或多或少像这样(未经测试):
import numpy as np
def my_hist(x, bin_centers):
bin_edges = np.r_[-np.Inf, 0.5 * (bin_centers[:-1] + bin_centers[1:]),
np.Inf]
counts, edges = np.histogram(x, bin_edges)
return counts
Run Code Online (Sandbox Code Playgroud)
当然,它并没有涵盖matlab hist提供的所有边缘情况,但你明白了.