You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia创建仅含1、2、3的长度500随机向量出现0残留问题

问题分析:生成仅含1、2、3的随机向量时出现0元素的原因

问题描述

我希望创建一个长度为Dl=500的随机向量,向量元素仅包含1、2、3。我编写了如下代码:

v = fill(0, Dl) # 创建一个长度为500的全零向量
v[rand(1:length(v), Dl)] .= rand(1:3, Dl)

但运行后发现向量中仍存在0元素,即向量包含0、1、2、3而非仅1、2、3,请问问题出在哪里?

问题根源

rand(1:length(v), Dl)生成的是长度为500的随机索引数组,但这个数组里会有重复的索引值。这就导致:一部分位置被多次赋值,而另一部分位置可能一次都没被选中,这些未被选中的位置就保留了初始的0值。

举个简单例子,假设Dl=3,rand(1:3,3)可能输出[2,2,3],此时索引1从未被选中,对应位置的0就不会被替换。

解决方案

最直接高效的写法是直接生成目标向量,无需先创建全零数组:

Dl = 500
v = rand(1:3, Dl)

如果一定要保留“先初始化再赋值”的逻辑,需要确保每个索引都被覆盖到,比如用shuffle生成无重复的索引序列:

Dl = 500
v = fill(0, Dl)
v[shuffle(1:Dl)] .= rand(1:3, Dl)

但这种写法完全没必要,直接用第一种方式更简洁。

内容的提问来源于stack exchange,提问作者Rainbow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:49:55