在使用 StochasticPrograms.jl 包的 Julia 中,如何将 @sampler 对象作为 n*m 矩阵而不是向量获取?

In Julia using StochasticPrograms.jl package how can I get the @sampler object as a n*m matrix not a vector?

在 julia 编程语言中,我使用 StochasticPrograms.jl 包来模拟两阶段随机问题。我使用@sampler 对象来开发场景和随机值。随机变量服从正态分布。 @sampler 输出应该是一个 3*3 矩阵来匹配问题中定义的随机变量维度(d[1:J,1:T], J=3, T=3)。

我使用了几种不同的技术来获得 3*3 矩阵的输出(下面是其中之一),但没有成功。

using StochasticPrograms
@sampler SimpleSampler = begin
        N::MvNormal 
    
        SimpleSampler(µ, Σ) = new(MvNormal(µ, Σ))
    
    @sample Scenario begin

        x = rand(sampler.N) 
        
        return @scenario d = reshape(x,3,3)
    end
end

μ=[4,4,4,4,4,4,4,4,4]

Σ=[
    1 0 0 0 0 0 0 0 0;
    0 1 0 0 0 0 0 0 0;
    0 0 1 0 0 0 0 0 0;
    0 0 0 1 0 0 0 0 0;
    0 0 0 0 1 0 0 0 0;
    0 0 0 0 0 1 0 0 0;
    0 0 0 0 0 0 1 0 0;
    0 0 0 0 0 0 0 1 0;
    0 0 0 0 0 0 0 0 1;
]

s = SimpleSampler(μ,Σ)
s()

输出为:

d: [3.2222636794881696 1.9732554309220443 3.0941572984285233; 3.421615040079402 3.145688781906985 2.856241404036557; 3.0571013553323985 4.24134467488927 5.800220182172864]

正如@OscarDowson 在评论中提到的那样,输出 一个 3x3 矩阵。输出中的 semi-colons 表示一行的结尾和下一行的开头。

您似乎在输出类似这样的内容:print("d: ", d)。相反,请尝试使用 display(d)。正如 print 的文档所说:

Write ... a canonical (un-decorated) text representation
The representation used by print includes minimal formatting

print 调用的输出非常简单。原因我没研究过,但我的理解是它的优先级是一致的machine-readable。对于人类可读性,display 更好。

编辑:哦,如果您还没有阅读手册中的 Performance tips,请通读。一旦你开始将它构建到任何计算密集型的东西中,像这里一样将所有东西都作为全局变量会导致性能下降。