如何生成指定位置为1其余为0的向量?Julia实现问题求助
解决方案
你的问题核心是索引类型导致的意外行为,以下是几种无需循环的解决办法:
原因分析
你提到生成了4维全1向量,大概率是把A定义成了元组(2,3,6,10)而非向量[2,3,6,10]。在Julia中,元组作为索引传入1维数组时,会被解析为多维索引,从而创建出不符合预期的多维数组。
方案1:修正原代码(最简)
确保A是向量类型,你的原代码就能正常工作:
# 正确定义A为向量 A = [2, 3, 6, 10] # 创建长度为max(A)的零向量 B = zeros(Int, maximum(A)) # 给指定位置赋值为1 B[A] .= 1
执行后B就是预期的[0,1,1,0,0,1,0,0,0,1]。
方案2:使用列表推导式
通过推导式直接生成目标向量,语法直观:
A = [2, 3, 6, 10] max_val = maximum(A) B = [i ∈ A ? 1 : 0 for i in 1:max_val]
方案3:布尔向量转换(高效)
对于大规模数据,使用布尔向量更节省内存,之后可按需转为整数类型:
A = [2, 3, 6, 10] # 创建全false的布尔向量 B = falses(maximum(A)) # 指定位置设为true B[A] .= true # 转换为Int类型(可选) B = Int.(B)
内容的提问来源于stack exchange,提问作者Olorin
相关产品推荐
相关产品推荐

