gpt4 book ai didi

for-loop - 打破 Julia 中的循环

转载 作者:行者123 更新时间:2023-12-02 15:17:26 27 4
gpt4 key购买 nike

我有一个 VectorVector不同长度的 s W .这些最后的向量包含 0 到 150,000 之间的整数,步长为 5,但也可以为空。我正在尝试计算每个向量的经验 cdf。我可以像这样计算这些 cdf 迭代每个向量和每个整数

cdfdict = Dict{Tuple{Int,Int},Float64}()
for i in 1:length(W)
v = W[i]
len = length(v)
if len == 0
pcdf = 1.0
else
for j in 0:5:150_000
pcdf = length(v[v .<= j])/len
cdfdict[i, j] = pcdf
end
end
end

但是,这种方法效率低下,因为对于 j >= maximum(v),cdf 将等于 1有时这个maximum(v)将远低于 150,000。

我的问题是:如何包含突破 j 的条件?循环 j > maximum(v)但仍然分配 pcdf = 1.0剩下的 j是吗?

我尝试包含一个 break什么时候j > maximum(v)但这当然会阻止循环继续 j 的其余部分秒。另外,我可以打破循环然后使用 get!访问/包含 1.0对于在 cdfdict 中找不到的 key 稍后,但这不是我要找的。

最佳答案

为了详细说明我的评论,这个答案详细说明了一个填充数组而不是字典的实现。

首先创建一个随机测试用例:

W = [rand(0:mv,rand(0:10)) for mv in floor(Int,exp(log(150_000)*rand(10)))]

接下来创建一个以 1.0 填充的大小合适的数组:

cdfmat = ones(Float64,length(W),length(0:5:150_000));

现在填充 CDF 的开头:

for i=1:length(W)
v = sort(W[i])
k = 1
thresh = 0
for j=1:length(v)
if (j>1 && v[j]==v[j-1])
continue
end
pcdf = (j-1)/length(v)
while thresh<v[j]
cdfmat[i,k]=pcdf
k += 1
thresh += 5
end
end
end

这个实现使用了一个有时会很慢的排序,但是其他实现基本上是将向量与各种值进行比较,这在大多数情况下甚至更慢。

关于for-loop - 打破 Julia 中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39431023/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com