Не удается объединить матрицы Теплица в Юлии 1.8.5

Я могу сделать следующее перед моим последним обновлением до Джулии 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

На моей машине работает на 1.8.5 (с указанным выводом как матрица 3х6)

Dan Getz 04.04.2023 19:04

Спасибо за ваш ответ. Может тогда это моя установка? Кто-нибудь использует версию Julia, которая поставляется с дистрибутивом Linux Manjaro (который я последний раз обновлял несколько дней назад). Я использую REPL внутри Code-OSS (тоже из дистрибутива).

TD TL 04.04.2023 19:29

ОС при условии, что Юлии очень часто ломаются

Oscar Smith 04.04.2023 20:31

Вы должны использовать официальные загрузки (и использовать Juliaup, если вы хотите легкого обновления)

Oscar Smith 04.04.2023 20:31

У меня такая же ошибка при отдельной установке Юлии из официальных загрузок.

TD TL 05.04.2023 03:39

Фрагмент кода в OP редактируется (очевидно, поскольку приглашение Julia отсутствует, но появляется сообщение об исключении). Это редактирование устранило фактическую причину ошибки. Пожалуйста, обновите вопрос, даже если ответ очевиден, учитывая исходный код (и начните с нового сеанса Julia).

Dan Getz 05.04.2023 16:27

Я вижу ту же ошибку, что и ОП, когда пытаюсь использовать как 1.8.5, так и 1.9.0-rc2, поэтому я думаю, что это реально. Имеет смысл, что это реально, учитывая, как hcat ведет себя для типов массивов T, которые не удовлетворяют isa(T, Array).

PaSTE 05.04.2023 17:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, извините @PaSTE и @TDTL за сомнения в существовании ошибки. Причина в версии ToeplitzMatrices 0.8.0 (у меня была установлена ​​0.7.1).

В частности, добавление специализированного определения для similar(...) для теплицевых матриц нарушает это, поскольку результирующая матрица на самом деле не является матрицей Теплица (в то время как новое определение similar возвращает матрицу Теплица).

Решения:

  1. вернуться к 0.7.1 (с помощью add [email protected] в подсказке pkg и перезапустить) или
  2. использовать hcat(collect(B1), B2)

Проблема с этим сбоем должна быть отмечена для разработчика пакета. Не уверен, что это правильное исправление, так как было бы неплохо иметь совместимые матрицы Теплица hcat и использовать similar для создания новой матрицы Теплица.

Спасибо, Дэн. Я не думал об использовании collect(). Мой обходной путь состоял в том, чтобы использовать B1 .+ 0.

TD TL 06.04.2023 15:33

Другие вопросы по теме