英文:
Julia: how to randlomy create vector of size n having only specific numbers?
问题
我想创建一个大小为Dl = 500
的随机数向量,只包含1、2或3。我使用了以下代码:
v = fill(0, Dl) # 创建一个大小为500且填充为0的向量
v[rand(1:length(v), Dl)] .= rand(1:3, Dl)
但是,我发现一些数字是0。我想要的是0、1、2、3而不只是1、2、3。问题是什么?
英文:
I'd like to create a vector of random number of size Dl =500
and only have number 1 ot 2 or 3. I did
v = fill(0, Dl) # create a vector of size 500 filled with zeros
v[rand(1:length(v), Dl)] .= rand(1:3, Dl)
However, I see that some numbers are 0. I have 0,1,2,3 not jsu t 1,2,3. What is the issue?
答案1
得分: 1
因为你同时随机化了目标索引和它们的值。
执行:
v .= rand(1:3, Dl)
足以用新的随机值就地替换 v
的值。
或者,你可以只写:
v = rand(1:3, Dl)
(不包括 fill
部分)来获得你想要的结果。
英文:
Because you are both randomizing target indices and their values.
Doing:
v .= rand(1:3, Dl)
is enough to replace values of v
in-place with fresh random values.
Altenatively, you could just write:
v = rand(1:3, Dl)
(without the fill
part) to get what you want.
答案2
得分: 1
这是您要翻译的部分:
我想这就是您试图实现的内容。
Dl = 500
v = fill(0, Dl) # 创建一个大小为500的用零填充的向量
v[1:Dl] .= rand(1:3, Dl)
您的问题可以用一个小一点的示例来解释:
Dl = 10
v = fill(0, Dl) # 创建一个大小为500的用零填充的向量
v[rand(1:length(v), Dl)] .= rand(1:3, Dl)
将这个问题分解成组件,我们可以看到您有:
Dl = 10
v = fill(0, Dl) # 创建一个大小为500的用零填充的向量
problem = rand(1:length(v), Dl)
v[problem] .= rand(1:3, Dl)
所以,problem
变成了一个大小为 Dl
的向量,其中 problem
的每个索引都是介于 1 和 Dl
或 length(v)
之间的值。因此,一个可能的集合是 [1,2,6,5,8,5,10,2,4,4]。因此,您现在多次设置了索引2、5、4,但只设置了1、6、8、10一次,然后从不触及索引3、7、9。由于您将向量初始化为全部为零,它们将保持在索引3、7、9处的零状态。
英文:
I suppose this is what you are trying to achieve.
Dl =500
v = fill(0, Dl) # create a vector of size 500 filled with zeros
v[1:Dl] .= rand(1:3, Dl)
Your issue can be explained down below with a smaller set of ten:
Dl = 10
v = fill(0, Dl) # create a vector of size 500 filled with zeros
v[rand(1:length(v), Dl)] .= rand(1:3, Dl)
Breaking this down into components we can see you have:
Dl = 10
v = fill(0, Dl) # create a vector of size 500 filled with zeros
problem = rand(1:length(v), Dl)
v[problem] .= rand(1:3, Dl)
So problem
becomes a vector of size Dl
with at each index of problem
is a value between 1 and Dl
or length(v)
. So a possible set is [1,2,6,5,8,5,10,2,4,4]. So you are now setting the index' at 2,5,4 more than once, 1,6,8,10 only once and then never touch index 3,7,9.Because you initialized your vector to all zeros they will remain at zero in indices 3,7,9.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论