Я могу сделать следующее перед моим последним обновлением до Джулии 1.8.5. Теперь я получаю сообщение об ошибке. Я могу конкатенировать нормальные (случайно сгенерированные) матрицы в порядке.
julia> using ToeplitzMatrices
julia> 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
julia> B2 = B1 .+ 3
3×3 Matrix{Int64}:
4 6 8
5 4 6
7 5 4
julia> 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
Спасибо за ваш ответ. Может тогда это моя установка? Кто-нибудь использует версию Julia, которая поставляется с дистрибутивом Linux Manjaro (который я последний раз обновлял несколько дней назад). Я использую REPL внутри Code-OSS (тоже из дистрибутива).
ОС при условии, что Юлии очень часто ломаются
Вы должны использовать официальные загрузки (и использовать Juliaup, если вы хотите легкого обновления)
У меня такая же ошибка при отдельной установке Юлии из официальных загрузок.
Фрагмент кода в OP редактируется (очевидно, поскольку приглашение Julia отсутствует, но появляется сообщение об исключении). Это редактирование устранило фактическую причину ошибки. Пожалуйста, обновите вопрос, даже если ответ очевиден, учитывая исходный код (и начните с нового сеанса Julia).
Я вижу ту же ошибку, что и ОП, когда пытаюсь использовать как 1.8.5, так и 1.9.0-rc2, поэтому я думаю, что это реально. Имеет смысл, что это реально, учитывая, как hcat
ведет себя для типов массивов T
, которые не удовлетворяют isa(T, Array)
.
Хорошо, извините @PaSTE и @TDTL за сомнения в существовании ошибки. Причина в версии ToeplitzMatrices 0.8.0 (у меня была установлена 0.7.1).
В частности, добавление специализированного определения для similar(...)
для теплицевых матриц нарушает это, поскольку результирующая матрица на самом деле не является матрицей Теплица (в то время как новое определение similar
возвращает матрицу Теплица).
Решения:
add [email protected]
в подсказке pkg
и перезапустить) илиhcat(collect(B1), B2)
Проблема с этим сбоем должна быть отмечена для разработчика пакета. Не уверен, что это правильное исправление, так как было бы неплохо иметь совместимые матрицы Теплица hcat
и использовать similar
для создания новой матрицы Теплица.
Спасибо, Дэн. Я не думал об использовании collect(). Мой обходной путь состоял в том, чтобы использовать B1 .+ 0.
На моей машине работает на 1.8.5 (с указанным выводом как матрица 3х6)