SciPy - '对象太深,不适合所需的数组'当子类化rv_continuous时

时间:2014-10-29 23:27:28

标签: python numpy scipy probability

我试图通过继承rv_continuous来生成2D均匀分布。

from scipy import stats
class uniform_2d(stats.rv_continuous):   
    def _pdf(self, x, y):
        X, Y = np.meshgrid(x,y)
        result = 1/(max(x)*max(y)) * np.ones_like(X)
        return result

x = y = np.linspace(1,3,3)
uni = uniform_2d(name="uni")
pdf = uni.pdf(x,y)

fig = plt.figure(figsize=(9,5))
ax = fig.add_subplot(111)
ax.pcolor(X,Y,pdf)

尝试返回结果时失败,出现以下错误:

ValueError: object too deep for desired array

发生了什么?我的结果有形状(3,3)并且有numpy.ndarray类 - 为什么我只能返回一个numpy.ndarray

编辑:另外,我是否采取了错误的方式?是否有更简单的方法使用scipy.stats进行2D均匀分布?

1 个答案:

答案 0 :(得分:3)

rv_continuous仅适用于单变量分布。您可以查看scipy/stats/_multivariate.py我们如何制作多变量分布对象。目前,没有共同的基类,只是一个预期的接口。