我想创建15个虚拟变量,并在以下代码中使用它们,我也想使其更短。所以问题是,如何在不使用D1=zeros(3300)
,...,D15=zeros(3300)
的情况下使这15个虚拟变量成为可能。
此外,如何使它更紧凑?
for i=1:3300
if dt[i,2]==1 D1[i]=1 end
if dt[i,2]==2 D2[i]=1 end
if dt[i,2]==3 D3[i]=1 end
if dt[i,2]==4 D4[i]=1 end
if dt[i,2]==5 D5[i]=1 end
if dt[i,2]==6 D6[i]=1 end
if dt[i,2]==7 D7[i]=1 end
if dt[i,2]==8 D8[i]=1 end
if dt[i,2]==9 D9[i]=1 end
if dt[i,2]==10 D10[i]=1 end
if dt[i,2]==11 D11[i]=1 end
if dt[i,2]==12 D12[i]=1 end
if dt[i,2]==13 D13[i]=1 end
if dt[i,2]==14 D14[i]=1 end
if dt[i,2]==15 D15[i]=1 end
end
答案 0 :(得分:7)
我建议不要直接创建变量D1
到D15
,而应将它们保存在向量的向量中并按如下方式分配给它们:
D = [zeros(3300) for i in 1:15]
for i in 1:3300
D[dt[i,2]][i] = 1
end
现在D[i]
相当于您的Di
。
如果您真的想在全局范围内拥有Di
变量,则可以稍后编写例如:
for i in 1:15
eval(:($(Symbol("D", i)) = D[$i]))
end
,您将获得Di
变量。
:
字符在Julia中具有两个语法目的。第一种形式创建一个Symbol,这是一个用作表达式的构建块的内部字符串:
julia> :foo
:foo
julia> typeof(ans)
Symbol
第二个是Range运算符。 a:b
构造一个从a到b的步长为1(单位范围)的范围,而a:s:b
相似,但步长为s(一个StepRange)。
Julia允许使用$
插入字符串文字,如Perl:
julia> "$greet, $whom.\n"
"Hello, world.\n"
julia> "1 + 2 = $(1 + 2)"
"1 + 2 = 3"
您可以通过类似的方式插入表达式,例如:
julia> x = 1
1
julia> :(x = $x)
:(x = 1)
Symbol
通过将参数的字符串表示连接在一起来创建符号。
julia> Symbol("my", "name")
:myname