You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia 1.8.5中无法拼接Toeplitz矩阵问题求助

问题:Julia 1.8.5中Toeplitz矩阵与普通矩阵hcat报错

更新到Julia 1.8.5前,可正常用hcat拼接Toeplitz矩阵和普通矩阵,现在执行会触发错误,普通随机生成矩阵的拼接不受影响。

复现代码

using ToeplitzMatrices

# 创建Toeplitz矩阵
B1 = Toeplitz([1, 2, 4], [1, 3, 5])
# 输出:
# 3×3 Toeplitz{Int64, Vector{Int64}, Vector{Int64}}:
#  1  3  5
#  2  1  3
#  4  2  1

# Toeplitz矩阵加3得到普通矩阵
B2 = B1 .+ 3
# 输出:
# 3×3 Matrix{Int64}:
#  4  6  8
#  5  4  6
#  7  5  4

# 尝试拼接触发错误
hcat(B1, B2)

报错信息

ERROR: CanonicalIndexError: setindex! not defined for Toeplitz{Int64, Vector{Int64}, Vector{Int64}}
Stacktrace:
  [1] error_if_canonical_setindex(::IndexCartesian, ::Toeplitz{Int64, Vector{Int64}, Vector{Int64}}, ::Int64, ::Int64)
    @ Base ./abstractarray.jl:1354
  [2] setindex!
    @ ./abstractarray.jl:1343 [inlined]
  [3] macro expansion
    @ ./multidimensional.jl:946 [inlined]
  [4] macro expansion
    @ ./cartesian.jl:64 [inlined]
  [5] _unsafe_setindex!(::IndexCartesian, ::Toeplitz{Int64, Vector{Int64}, Vector{Int64}}, ::Toeplitz{Int64, Vector{Int64}, Vector{Int64}}, ::Base.Slice{Base.OneTo{Int64}}, ::UnitRange{Int64})
    @ Base ./multidimensional.jl:941
  [6] _setindex!
    @ ./multidimensional.jl:930 [inlined]
  [7] setindex!
    @ ./abstractarray.jl:1344 [inlined]
  [8] _typed_hcat(#unused#::Type{Int64}, A::Tuple{Toeplitz{Int64, Vector{Int64}, Vector{Int64}}, Matrix{Int64}})
    @ Base ./abstractarray.jl:1618
  [9] typed_hcat
    @ ./abstractarray.jl:1586 [inlined]
 [10] hcat(::Toeplitz{Int64, Vector{Int64}, Vector{Int64}}, ::Matrix{Int64})
    @ Base ./abstractarray.jl:1589
 [11] top-level scope
    @ REPL[4]:1

期望输出

1  3  5  11  13  15
2  1  3  12  11  13
4  2  1  14  12  11

解决方案

报错核心是Toeplitz属于特殊不可变数组类型,未实现setindex!方法,而Julia 1.8.5的hcat逻辑尝试直接修改原Toeplitz矩阵完成拼接,导致错误。

解决方式很简单:先将Toeplitz矩阵转换为普通矩阵,再执行拼接操作:

hcat(Matrix(B1), B2)

若需要保留特殊矩阵结构的原生拼接支持,可向ToeplitzMatrices包提交issue,请求添加hcat的重载实现,避免直接操作原矩阵。

内容的提问来源于stack exchange,提问作者TD TL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 02:25:39