Julia中Array{Float64,1}转SentinelArrays.ChainedVector报错如何解决
报错原因
你遇到的MethodError是类型不匹配导致的:Load_dict的value被预先指定为SentinelArrays.ChainedVector{Float64,Array{Float64,1}}类型,但你赋值的fill(0.0,8760)是普通Array{Float64,1}类型,Julia没有默认的自动转换规则,所以触发报错。
解决方案
Array{Float64,1}可以手动转换为目标ChainedVector类型,也可以直接生成对应类型的数组,两种实现方式如下:
方式1:将现有普通数组转换为ChainedVector
用SentinelArrays包提供的ChainedVector构造器包裹普通数组即可,修改后的循环代码:
using SentinelArrays # 确保已经安装并引入该包 for k in N Load_dict[k] = ChainedVector([fill(0.0, 8760)]) end
注意ChainedVector的入参是存储子数组的集合,所以需要把生成的一维数组放到外层方括号中传入。
方式2:直接生成目标类型的全0数组
不需要先创建普通数组,可以直接构造符合类型要求的对象:
using SentinelArrays for k in N Load_dict[k] = ChainedVector([zeros(8760)]) end
zeros(8760)和fill(0.0, 8760)效果完全一致,写法更简洁。
验证方法
你可以运行以下代码确认类型是否匹配:
@assert typeof(Load_dict[first(N)]) == SentinelArrays.ChainedVector{Float64,Array{Float64,1}}
如果没有抛出断言错误,说明类型匹配成功,不会再触发该报错。
内容的提问来源于stack exchange,提问作者Naser Hashemipour
相关产品推荐
相关产品推荐

