Julia中如何通过for循环创建矩阵?Matlab转用户技术问询
在Julia中用for循环创建矩阵的正确方法
先分析你遇到的错误
Matlab原代码无法运行的原因:
Julia不会像Matlab那样自动为未定义的变量创建数组并动态扩容,必须先初始化数组;另外Julia的索引语法是方括号[],而非Matlab的圆括号()。你尝试的代码报错原因:
Array{Int64, n}是数组类型对象,不是可写入的实际数组实例,自然无法用k[i] = i赋值。你需要创建具体的数组实例,比如用zeros、ones或Array{Int64}(undef, ...)初始化。
对应你Matlab代码的实现(创建100×1矩阵)
如果你要复刻Matlab代码生成的100行1列、每行元素为i²的矩阵,可按以下步骤:
n = 100 # 初始化一个n行1列的Int64类型矩阵,初始值为0 k = zeros(Int64, n, 1) for i in 1:n # Julia用[]索引,行i、所有列赋值为i的平方 k[i, :] = i^2 end
如果只需要一维向量(Julia中向量是一维数组,等价于Matlab的列向量),代码更简洁:
n = 100 k = zeros(Int64, n) for i in 1:n k[i] = i^2 end
可选:动态扩容的循环写法(不推荐,效率较低)
如果想模拟Matlab自动扩容的逻辑,可先初始化空数组,再通过循环添加元素:
# 创建空的Int64类型向量 k = Int64[] for i in 1:100 # 向数组末尾添加元素i² push!(k, i^2) end # 若需转成二维矩阵,执行:k = reshape(k, :, 1)
额外提示(非循环写法,更符合Julia风格)
Julia中无需循环也能快速生成相同结果,比如:
- 生成器表达式:
k = [i^2 for i in 1:100] - 广播操作:
k = (1:100).^2
内容的提问来源于stack exchange,提问作者Manu Han
相关产品推荐
相关产品推荐

