在使用 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,请通读。一旦你开始将它构建到任何计算密集型的东西中,像这里一样将所有东西都作为全局变量会导致性能下降。
在 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,请通读。一旦你开始将它构建到任何计算密集型的东西中,像这里一样将所有东西都作为全局变量会导致性能下降。