Julia 使用FOR循环和函数填充数组

Julia 使用FOR循环和函数填充数组,julia,Julia,我原以为下面的代码会用随机的1和0填充E,但事实并非如此。我不明白为什么 Pkg.add("StatsBase") using StatsBase function randomSample(items,weights) sample(items, Weights(weights)) end n = 10 periods = 100 p = [ones(n,periods)*0.5] E = fill(NaN, (n,periods)) for i in 1:periods

我原以为下面的代码会用随机的1和0填充E,但事实并非如此。我不明白为什么

Pkg.add("StatsBase")
using StatsBase

function randomSample(items,weights)
    sample(items, Weights(weights))
end



n = 10
periods = 100

p = [ones(n,periods)*0.5]
E = fill(NaN, (n,periods))

for i in 1:periods
    for ii in 1:n
        E(ii,i) = randomSample([1 0],[(p(ii,i)), 1 - p(ii,i)])
    end
end
E
声明:

E(ii,i) = randomSample([1 0],[(p(ii,i)), 1 - p(ii,i)])
定义局部函数
E
,而不是矩阵
E
的赋值操作。使用

E[ii,i] = randomSample([1, 0],[p[ii,i], 1 - p[ii,i]])
(我已修复代码中的其他错误,因此请检查差异)

要使其运行,您还应编写:

p = ones(n,periods)*0.5

与MATLAB不同,索引是使用Julia中的括号而不是括号来完成的。不过,请小心括号,
[一(5,10)]
将为您提供一个
数组的
数组。然而,在MATLAB中,添加尽可能多的括号并没有什么区别:结果将只是一个矩阵。既然您已经在使用
fill
初始化
E
,为什么不对
p
进行同样的操作呢?也就是说,
p=fill(0.5,(n,句点))
。这比先创建一个1矩阵,然后将第一个矩阵乘以0.5来创建第二个矩阵更有效(也更合理)。