LINUX.ORG.RU

заменить функцию uencode

 


0

1

Есть код на Matlab, мне его очень надо запустить на GNU/Octave. Всё в принципе на 99.9% совместимо, но осталась досадная проблемка: функция uencode не реализована и потому не работает всё, а если обойти эту функцию то всё неправильно.

octave --version
GNU Octave, version 4.0.2
Copyright (C) 2016 John W. Eaton and others.
warning: the 'uencode' function belongs to the signal package from Octave Forge but has not yet been implemented

В коде есть:

#!/usr/bin/octave -q
pkg load signal
Пакет «sudo apt-get install octave-signal» установлен, инет говорит что два года некий индус прислал патч с реализацией этой функции, версия самая последняя стабильная, ставил из PPA.

Я что-то неправильно делаю или функция действительно не реализована? Может есть способ как сделать ее аналог? Просто я давно уже на Python для этого дела перешел с матлабов-октавей.

прислал патч с реализацией этой функции

Так просто прислали или прислал и его приняли? Мне уже попадались случаи, когда патчи шлют, но так они и остаются в баг-трекере, mailing list. Лучше чем ничего, но надо самому ручками его накладывать/править.

gag ★★★★★
()
Ответ на: комментарий от gag

Ясно, я посмотрел как выглядит патч - так это ж просто текст функции, воткнул это из патча:

function out = uencode (in, n, v = 1, signed = "unsigned")

  if (nargin < 2 || nargin > 4)
    print_usage ();
  endif

  if (n < 2 || n > 32 || n != fix (n))
    error ("uencode: N must be an integer in [2 32].");
  endif

  if (v <= 0)
    error ("uencode: V must be a possitive integer.");
  endif

  if (! (strcmp (signed, "signed") || strcmp (signed, "unsigned")))
    error ("uencode: SIGNED must be either \"signed\" or \"unsigned\".");
  endif

  out = zeros (size (in));

  width = 2 * v / 2 ^ n;

  out(in >= v) = (2 ^ n) - 1;
  idx = (in > -v) & (in < v);
  out(idx) = floor ((in(idx) + v) ./ width);
  if (strcmp (signed, "signed"))
    out = out - 2 ^ (n - 1);
  endif

endfunction
И всё заработало! Проблема решена.

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.