С питона на луа, памажити )

Страницы: 1
RSS
С питона на луа, памажити ), питон
 
Есть функция на питоне, как она должна выглядеть на луа?
Код
_rman(src, len,)=>    
    var m = matrix.new<float>(len, 2, 0.)
    for k = 0 to len- 1
        matrix.set(m, k, 0, nz(src[k]))
        matrix.set(m, k, 1, k)
    matrix.sort(m, 0, order.descending)
    sum = 0.0
    for k = 0 to len- 1
        sum += math.pow(matrix.get(m, k, 1) - k, 2)
    sum 
Если не трудно, накидайте хотябы примерно )
 
Ответ нейросети:

Pine‑Script умеет работать с «матрицами» и предоставляет готовые функции

matrix.new, matrix.set, matrix.sort, matrix.get.

В Lua таких стандартных средств нет – обычно все делается через обычные
таблицы (table) и функцию сортировки table.sort.

Ниже приведён эквивалент кода, который делает то же самое, но написан в стиле Lua
Код
--[[
    rman(src, len)

    src – таблица чисел (или «series»), длина которой должна быть >= len.
    len – количество элементов, которые будем обрабатывать.

    Возвращает: сумма квадратов разницы между позицией элемента после сортировки
    по убыванию его значения и исходной позицией в массиве.
--]]
function rman(src, len)
    -- 1) Собираем «матрицу» как таблицу вложенных таблиц:
    --      {value = <значение>, idx = <исходный индекс>}
    local m = {}
    for k = 1, len do
        local val = src[k] or 0          -- заменяем nil/NaN на 0 (nz в Pine)
        local idx = k - 1                -- Pine использует индексы от 0,
                                         -- поэтому смещаем на 1
        m[#m + 1] = {value = val, idx = idx}
    end

    -- 2) Сортируем по убыванию значения (первый столбец)
    table.sort(m, function(a, b)
        return a.value > b.value         -- descending order
    end)

    -- 3) Вычисляем сумму квадратов разницы позиций
    local sum = 0.0
    for i = 1, len do
        local diff = m[i].idx - (i - 1)   -- опять смещение индексов на 0
        sum = sum + diff * diff          -- math.pow(diff,2) можно заменить умножением
    end

    return sum
end

Ключевые отличия от Pine‑Script

Что делает Pine‑Script Lua
Создание «матрицы» matrix.new обычный массив таблиц ({})
Заполнение ячейки matrix.set(m, k, 0, nz(src[k])) просто m[#m+1] = {value=val, idx=k-1}
Сортировка matrix.sort(m, 0, order.descending) table.sort(m, function(a,b) return a.value > b.value end)
Доступ к элементу matrix.get(m, k, 1) m[k].idx
Возведение в степень math.pow(x,2) x * x (быстрее)
Как использовать


Код
-- пример входных данных
local src = {5.2, nil, 3.7, 4.1, 0.9}
local len = #src          -- считаем все элементы

print(rman(src, len))     -- выведет сумму квадратов разниц



 
ответ нейросети (результат не проверял):
-----------------------
Код
Вот переписанная функция на Lua с учетом особенностей языка:

function rman(src, len)
    -- Создаем матрицу как таблицу таблиц
    local m = {}
    for k = 1, len do
        -- Используем 1-индексацию, храним исходный индекс как k-1 (0-based)
        m[k] = { 
            src[k] or 0,  -- nz() аналог: заменяем nil/NaN на 0
            k - 1         -- сохраняем 0-based индекс
        }
    end

    -- Сортировка по первому элементу (значению) по убыванию
    table.sort(m, function(a, b) 
        return a[1] > b[1] 
    end)

    -- Вычисление суммы квадратов разностей
    local sum = 0.0
    for k = 1, len do
        local original_index = m[k][2]  -- исходный 0-based индекс
        local current_index = k - 1     -- текущий 0-based индекс
        sum = sum + math.pow(original_index - current_index, 2)
    end

    return sum
end


Ключевые отличия и пояснения:Индексация:Lua использует 1-based индексацию, 
поэтому циклы идут от 1 до len Исходные индексы (0-based) сохраняются как k - 1Матрица:
Реализована как таблица таблиц m = {}Каждая строка: { значение, исходный_индекс }
Обработка NaN/nil:Аналог nz() - src[k] or 0 заменяет nil/NaN на 0
Для строгой проверки NaN можно добавить: type(src[k]) == "number" and src[k] == src[k]
Сортировка:Используется table.sort() с кастомным компаратором 
Сортировка по первому элементу (значению) по убываниюВычисление суммы:
В цикле сравниваются исходный индекс и текущая позицияРазница возводится в квадрат через math.pow()
Пример использования:lua

local data = {10, 30, 20, 50, 40}
local result = rman(data, #data)
print(result)  -- Выведет: 10.0

Особенности реализации:Функция принимает таблицу src и длину len 
Возвращает число (сумму квадратов разностей)Корректно обрабатывает:
Отрицательные числа Нулевые значенияДубликаты в исходных данныхНеопределенные значения (nil/NaN)
Для работы с очень большими массивами (>100K элементов) рекомендуется оптимизировать сортировку, 
но для типичных случаев (например, технический анализ) текущая реализация эффективна.
 
Это не питон. Скорее F#
 
nikolz , Станислав, Спасибо! Завел работает.
Не хватало для работы
Скрытый текст
 
Игорь Б, В принципе безразницы. Я луа считаю паскалем. Когдато на нем учился )
 
Цитата
prugramzer написал:
Игорь Б, В принципе безразницы. Я луа считаю паскалем. Когдато на нем учился )
Прикольно. Это как  мото считать авто, а корову - лошадью.  
Страницы: 1
Читают тему
Наверх