【问题标题】:SciPy - 'Object too deep for desired array' when subclassing rv_continuousSciPy - 子类化rv_continuous时“对象太深,无法满足所需的数组”
【发布时间】:2014-10-30 16:20:47
【问题描述】:

我正在尝试通过子类化rv_continuous 来生成二维均匀分布。

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 进行二维均匀分布?

【问题讨论】:

    标签: python numpy scipy probability


    【解决方案1】:

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

    【讨论】:

    • 好吧,为了我的目的,我通过简单地使用 multivariate_norm 分布得到了解决方法。我有点惊讶 SciPi 中的多元分布如此不发达!
    猜你喜欢
    • 2021-08-01
    • 2013-07-27
    • 2019-04-15
    • 2019-01-02
    • 2019-03-26
    • 2017-01-21
    • 2012-10-28
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多