Julia中填充多维数组报错问题求助
Julia中填充多维数组报错问题求助
嘿,我来帮你梳理下这个问题~
首先先明确你的需求:你想要创建一个数组X,其中每个X[i]都是一个向量,包含所有k*h[i]的值,这里k的取值范围是从0到floor(Int, 15/h[i])+1,对吧?
先看你写的代码:
h=[0.01 0.02 0.04 0.08 0.1 0.2 0.5 0.8] X=[k*h[i] for k in 0:floor(Int,15/h[i])+1 for i in 1:8]
你遇到报错的核心原因有两个:
- 循环顺序搞反了:你先遍历
k再遍历i,但计算k的范围时需要用到h[i],这时候i还没被迭代,Julia会找不到i的定义,直接抛出UndefVarError。 - 结构不符合预期:就算循环顺序对了,原来的推导式会生成一个扁平的一维数组,而不是每个
i对应一个独立向量的多维结构。
下面是修正后的方案:
步骤1:调整h的结构(可选但更直观)
你原来的h是一个1×8的行矩阵,改成一维向量会更方便后续操作:
h = [0.01, 0.02, 0.04, 0.08, 0.1, 0.2, 0.5, 0.8]
步骤2:生成符合需求的X
用嵌套的数组推导式,先遍历h中的每个元素,再为每个元素生成对应的k*hi向量:
X = [ [k * hi for k in 0:floor(Int, 15/hi)+1] for hi in h ]
这样X就是一个包含8个元素的数组,每个元素都是对应h[i]的目标向量。比如X[1]会包含从0到15.01、步长为0.01的所有值,完全符合你的要求。
如果你坚持要用索引i来遍历,也可以写成这样:
X = [ [k * h[i] for k in 0:floor(Int, 15/h[i])+1] for i in 1:length(h) ]
备注:内容来源于stack exchange,提问作者Hariz Khaled
相关产品推荐
相关产品推荐

