Arhn - архитектура программирования

MethodError: нет соответствия методов - (:: Int64, :: Array {Int64,1})

Я пробовал поиграть с этот пример в документации Julia. Моя попытка состояла в том, чтобы разделить клетку на две части, каждая из которых содержит половину количества белка.

using OrdinaryDiffEq
const α = 0.3
function f(du,u,p,t)
  for i in 1:length(u)
    du[i] = α*u[i]/length(u)
  end
end
function condition(u,t,integrator) # Event when event_f(u,t) == 0
  1-maximum(u)
end
function affect!(integrator)
  u = integrator.u
  idxs = findall(x->x>=1-eps(eltype(u)),u)
  resize!(integrator,length(u)+length(idxs))
  u[idxs] ./ 2
  u[end-idxs:end] = 0.5
  nothing
end
callback = ContinuousCallback(condition,affect!)
u0 = [0.2]
tspan = (0.0,10.0)
prob = ODEProblem(f,u0,tspan)
sol = solve(prob,Tsit5(),callback=callback)

Я получаю сообщение об ошибке: MethodError: no method matching -(::Int64, ::Array{Int64,1}). Я знаю, что есть проблема с idxs = findall(x->x>=1-eps(eltype(u)),u), и я пытался поставить точку между 1 и eps, но это не помогло. Я использую Юлию 1.1.1.


Ответы:


1

Запустив ваш код, stacktrace указывает на строку

u[end-idxs:end] = 0.5

Проблема здесь в том, что findall возвращает массив, даже если находит только один элемент, например.

julia> findall(x -> x > 2, [1,2,3])
1-element Array{Int64,1}:
 3

и вы не можете вычесть массив из end в выражении индексации.

Я недостаточно разбираюсь в вашем коде, чтобы понять, каким должен быть idxs, но если вы ожидаете, что это вернет только один элемент, вы можете либо использовать first(idxs) (или даже only(idxs) в Julia 1.4), либо заменить findall на findfirst, который возвращает index как целое число (а не как массив).

25.03.2020
  • Я все еще получаю MethodError, а именно: нет метода, соответствующего setindex_shape_check (:: Float64, :: Int64). idxs разбивает любые ячейки, которые больше или равны 1. 25.03.2020
  • В вашем коде могут быть и другие ошибки, но вы можете задать для них отдельные вопросы. В целом я не уверен, что понимаю вашу цель здесь: я понимаю, почему вы хотите разделить все элементы u на позиции idxs, но что должно означать end-idxs? Неужели вы можете начать индексацию только с одной позиции? Вы, может быть, имеете в виду end-length(idxs) здесь? 25.03.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..