朱莉娅:在for循环中创建数组

4

我想创建一个具有以下结构的数组

k[1]= 1

k[2]= 2

k[3]= 3

k[4]= 4

我尝试了以下方式,但它没有起作用

n= 10

for i in 1:n
 k[i]= i
end

有什么建议吗?

通常情况下,您实际上并不需要一个占用内存的数组,而可以使用一个范围,例如 k = -5:5。然后,您可以执行 k[3] 并获得 2,这是范围的第三个元素。 - David P. Sanders
4个回答

6

您还没有对数组进行初始化,因此调用k[1]、k[2]或k[n]不会返回错误。

您应该采取以下措施之一:

n= 10
k = Array(Int64, n) #or Float64 or Any instead of Int64
for i in 1:n
    k[i]= i
end

或者您可以
n= 10
k = []
for i in 1:n
    push!(k,i)
end

我建议使用前一种方法,如果你无法预先确定数组的大小,则另一种方法更合适。


1
我更喜欢第二种方法,即使我知道大小也是如此。但是,你应该最初使用正确的参数类型定义数组,例如,在这个例子中k = Int [ ] - David P. Sanders
1
似乎你提供的第一个版本在Julia 1.6+中无法运行(可能早期版本也是如此;会出现MethodError)。相反,可以使用“文档”中描述的Array{Int64}(undef, n),创建一个具有设置维度(1维,大小为n)和类型(Int64)的数组,并带有未初始化的值。 - postylem

5
您想获取特定的数组,最简单的方法是这样的:
k = collect(1:10)

如果您想在循环中定义数组,则需要首先进行预分配,例如使用k = zeros(10),然后指定值。
n = 10
k = zeros(n)
for i = 1:n
    k[i] = i
end

3

-3

你怎么知道它不起作用?尝试评估 k

n= 10

for i in 1:n
 k[i]= i
end

k

10-element Array{Int64,1}: 1 2 3 4 5 6 7 8 9 10

一种更加简洁的做法是:
collect(1:10)

2
在0.4.6版本中,这段代码会抛出一个UndefVarError错误,并且我怀疑在其他版本中也是如此。基本的假设是数组在问题中没有被初始化,作者只是在测试Matlab的行为,而在Matlab中这个代码可以工作。 - RedPointyJackson
谢谢解释。真是个尴尬的错误。我在 Jupyter 笔记本中运行了代码——其中 k 实际上是在另一个单元格中定义的。 - bit-player

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接