Это команда PDL :: Scilabp, которую можно запустить в провайдере бесплатного хостинга OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
PDL :: Scilab - Руководство для пользователей Scilab.
ВВЕДЕНИЕ
Если вы пользователь Scilab, эта страница для вас. Это объясняет ключевые различия между
Scilab и PDL, чтобы помочь вам начать работу как можно быстрее.
Эти документ is a учебник. Для этого перейдите в PDL :: QuickStart. Этот документ
комплементов краткое руководство, поскольку в нем подчеркиваются ключевые различия между Scilab и
ПДЛ.
Perl
Ключевое различие между Scilab и PDL заключается в Perl.
Perl - это язык программирования общего назначения с тысячами свободно доступных модулей.
В интернете. PDL - это расширение Perl. Это дает программам PDL доступ к большему количеству функций.
чем может мечтать большинство числовых инструментов. В то же время большинство синтаксических различий между
Scilab и PDL являются результатом его основы на Perl.
do встали на сторону в изучить много Perl в be высокоэффективным PDL. Но если ты хочешь научиться
Perl, в сети доступна отличная документация (http://perldoc.perl.org>) или
через команду "perldoc perl". Также есть портал для новичков
(<http://perl-begin.org>).
Репозиторий модулей Perl называется CPAN (http://www.cpan.org>) и имеет огромное количество
модули. Для получения дополнительной информации запустите «perldoc cpan».
ТЕРМИНОЛОГИЯ: ПИДДЛ
Scilab обычно обращается к векторам, матрицам и массивам. В Perl уже есть массивы, а
термины «вектор» и «матрица» обычно относятся к одно- и двумерным коллекциям
данные. Не имея подходящего термина для описания своего объекта, разработчики PDL придумали термин
"лужа"чтобы дать имя их типу данных.
A лужа состоит из ряда чисел, организованных как N-мерный набор данных. Piddles
обеспечивают эффективное хранение и быстрое вычисление больших N-мерных матриц. Они есть
оптимизирован для числовой работы.
Для получения дополнительной информации см. "Piddles vs Perl Массивы"далее в этом документе.
КОМАНДА ОКНО И IDE
PDL не поставляется с выделенной IDE. Однако он поставляется с интерактивной оболочкой и
вы можете использовать Perl IDE для разработки программ PDL.
PDL интерактивный оболочка
Чтобы запустить интерактивную оболочку, откройте терминал и запустите «perldl» или «pdl2». Как и в Scilab,
интерактивная оболочка - лучший способ выучить язык. Чтобы выйти из оболочки, введите
"выход", как и в Scilab.
Writing PDL программы
Одна из популярных IDE для Perl называется Padre (http://padre.perlide.org>). Это крест
платформа и проста в использовании.
Всякий раз, когда вы пишете автономную программу PDL (т.е. вне оболочки "perldl" или "pdl2")
вы должны запускать программу с "use PDL;". Эта команда импортирует модуль PDL в
Perl. Вот пример программы PDL:
использовать PDL; # Импортировать основной модуль PDL.
используйте PDL :: NiceSlice; # Импортировать дополнительный модуль PDL.
$ b = pdl [2,3,4]; # Операторы заканчиваются точкой с запятой.
$ A = pdl [[1,2,3], [4,5,6]]; # 2-мерный пиддл.
напечатать $ A x $ b-> транспонировать;
Сохраните этот файл как «myprogram.pl» и запустите его с помощью:
Perl myprogram.pl
Новое: Гибкий Подход синтаксис
В самых последних версиях PDL (версия 2.4.7 или новее) есть гибкий матричный синтаксис.
который может выглядеть очень похоже на Scilab:
1) Используйте ';' для разделения строк:
$ b = pdl q [2,3,4];
$ A = pdl q [1,2,3; 4,5,6];
2) Используйте пробелы для разделения элементов:
$ b = pdl q [2 3 4];
$ A = pdl q [1 2 3; 4 5 6];
По сути, если вы поставите «q» перед открывающей скобкой, PDL должен «делать то, что
вы имеете в виду ". Таким образом, вы можете писать в более удобном для вас синтаксисе.
A МОДУЛЬ Для СКИЛАБ пОЛЬЗОВАТЕЛЕЙ
Вот модуль, который пользователи Scilab захотят использовать:
PDL :: NiceSlice
Предоставляет PDL синтаксис для срезов (подматриц), который короче и более привычен для
Пользователи Scilab.
// Скилаб
b (1: 5) -> Выбирает первые 5 элементов из b.
# PDL без NiceSlice
$ b-> slice ("0: 4") -> Выбирает первые 5 элементов из $ b.
# PDL с NiceSlice
$ b (0: 4) -> Выбирает первые 5 элементов из $ b.
BASIC ФУНКЦИИ И ОСОБЕННОСТИ
В этом разделе объясняется, чем синтаксис PDL отличается от Scilab. Большинство пользователей Scilab захотят
Начни здесь.
Общие "ошибки"
Индексы
В PDL индексы начинаются с «0» (как C и Java), а не с 1 (как Scilab). Например, если
$ b - это массив из 5 элементов, элементы должны быть пронумерованы от 0 до 4.
Отображение объекта
Scilab обычно автоматически отображает содержимое объекта. В PDL вы отображаете объекты
явно с помощью команды "print" или ярлыка "p":
Скилаб:
-> а = 12
а = 12.
-> b = 23; // Подавить вывод.
->
PerDL:
pdl> $ a = 12 # Нет вывода.
pdl> print $ a # Печать объекта.
12
pdl> p $ a # "p" - это сокращение от "print" в оболочке.
12
Создающий Piddles
Переменные в PDL
Переменные всегда начинаются со знака «$».
Scilab: значение = 42
PerlDL: $ value = 42
Основной синтаксис
Используйте конструктор «pdl» для создания нового лужа.
Scilab: v = [1,2,3,4]
PerlDL: $ v = pdl [1,2,3,4]
Scilab: A = [1,2,3; 3,4,5]
PerlDL: $ A = pdl [[1,2,3], [3,4,5]]
Простые матрицы
Сцилаб PDL
------ ------
Матрица единиц (5,5) единиц 5,5
Матрица нулей нулей (5,5) нулей 5,5
Случайная матрица rand (5,5) random 5,5
Линейный вектор 1: 5 последовательность 5
Обратите внимание, что в PDL скобки в вызове функции часто необязательны. это
важно следить за возможными двусмысленностями. Например:
pdl> p нули 2, 2 + 2
Следует ли это интерпретировать как «нули (2,2) + 2» или как «нули 2, (2 + 2)»? Оба
действительные заявления:
pdl> p нулей (2,2) + 2
[
[2 2]
[2 2]
]
pdl> p нулей 2, (2 + 2)
[
[0 0]
[0 0]
[0 0]
[0 0]
]
Вместо того, чтобы пытаться запомнить порядок приоритета Perl, лучше использовать
круглые скобки, чтобы сделать ваш код однозначным.
Последовательности с линейным интервалом
Scilab: -> linspace (2,10,5)
ответ = 2, 4, 6, 8, 10.
PerlDL: pdl> p обнуляет(5) -> xlinval (2,10)
[2 4 6 8 10]
объяснение: Начните с одномерного поля из 1 элементов и дайте ему одинаково
значения с интервалом от 2 до 10.
Для этого в Scilab есть единственный вызов функции. С другой стороны, метод PDL более
гибкий:
pdl> p нулей (5,5) -> xlinval (2,10)
[
[2 4 6 8 10]
[2 4 6 8 10]
[2 4 6 8 10]
[2 4 6 8 10]
[2 4 6 8 10]
]
pdl> p нулей (5,5) -> ylinval (2,10)
[
[2 2 2 2 2]
[4 4 4 4 4]
[6 6 6 6 6]
[8 8 8 8 8]
[10 10 10 10 10]
]
pdl> p нулей (3,3,3) -> zlinval (2,6)
[
[
[2 2 2]
[2 2 2]
[2 2 2]
]
[
[4 4 4]
[4 4 4]
[4 4 4]
]
[
[6 6 6]
[6 6 6]
[6 6 6]
]
]
Нарезка и индексы
Извлечение подмножества из коллекции данных известно как нарезка. Оболочка PDL и
Scilab имеет похожий синтаксис для нарезки, но есть два важных отличия:
1) Индексы PDL начинаются с 0, как в C и Java. Scilab начинает индексы с 1.
2) В Scilab вы думаете «строки и столбцы». В PDL думайте «x и y».
Scilab PerlDL
------ ------
-> А pdl> p $ A
А = [
1. 2. 3. [1 2 3]
4. 5. 6. [4 5 6]
7. 8. 9. [7 8 9]
]
-------------------------------------------------- -----
(строка = 2, столбец = 1) (x = 0, y = 1)
-> А (2,1) pdl> p $ A (0,1)
ответ = [
одиннадцать]
]
-------------------------------------------------- -----
(строка = от 2 до 3, столбец = от 1 до 2) (x = от 0 до 1, y = от 1 до 2)
-> A (2: 3,1: 2) pdl> p $ A (0: 1,1: 2)
ответ = [
4. 5. [4 5]
7. 8. [7 8]
]
Предупреждение
Когда вы пишете автономную программу PDL, вы должны включить PDL :: NiceSlice
модуль. См. Предыдущий раздел "МОДУЛИ Для СКИЛАБ пОЛЬЗОВАТЕЛЕЙ" для большего
Информация.
использовать PDL; # Импортировать основной модуль PDL.
используйте PDL :: NiceSlice; # Хороший синтаксис для нарезки.
$ A = случайный 4,4;
напечатать $ A (0,1);
матрица Операционный отдел
Матричное умножение
Scilab: А * В
PerlDL: $ A x $ B
Поэлементное умножение
Scilab: A. * B
PerlDL: $ A * $ B
транспонировать
Scilab: A '
PerlDL: $ A-> транспонировать
функции которая совокупный данным
Некоторые функции (например, «sum», «max» и «min») агрегируют данные для N-мерного набора данных.
И Scilab, и PDL дают вам возможность применить эти функции ко всему набору данных или
только в одном измерении.
Scilab В Scilab эти функции по умолчанию работают со всем набором данных, а
необязательный параметр «r» или «c» заставляет их работать со строками или столбцами.
-> A = [1,5,4; 4,2,1]
А = 1. 5. 4.
4. 2. 1.
-> макс (А)
ответ = 5
-> макс (A, "r")
ответ = 4, 5, 4.
-> макс (A, "c")
ответ = 5.
4.
PDL PDL предлагает две функции для каждой функции.
сумма против сумовера
среднее по сравнению со средним
макс против максимума
мин против минимума
The длинной имя работает над размером, в то время как короткие имя работает над всем
лужа.
pdl> p $ A = pdl [[1,5,4], [4,2,1]]
[
[1 5 4]
[4 2 1]
]
pdl> p $ A-> максимум
[5 4]
pdl> p $ A-> транспонировать-> максимум
[4 5 4]
pdl> p $ A-> max
5
Высокая мерных данным Наборы
Связанный с этим вопрос заключается в том, как Scilab и PDL понимают наборы данных более высокого измерения. Scilab был
разработан для одномерных векторов и двухмерных матриц с добавлением объектов более высокой размерности поверх. В
Напротив, PDL с самого начала был разработан для N-мерных точек. Это приводит к нескольким
сюрпризы в Scilab, которых нет в PDL:
Scilab видит вектор как 2D-матрицу.
Scilab PerlDL
------ ------
-> вектор = [1,2,3,4]; pdl> $ vector = pdl [1,2,3,4]
-> размер (вектор) pdl> p $ vector-> dims
Ответ = 1 4 4
Scilab видит "[1,2,3,4]" как 2D-матрицу (матрица 1x4). PDL рассматривает его как одномерный вектор: A
Одноместный размер 4.
Но Scilab игнорирует последнее измерение матрицы 4x1x1.
Scilab PerlDL
------ ------
-> A = единицы (4,1,1); pdl> $ A = единицы 4,1,1
-> размер (A) pdl> p $ A-> dims
ANS = 4 1 4 1 1
И Scilab обрабатывает матрицу 4x1x1 иначе, чем матрицу 1x1x4.
Scilab PerlDL
------ ------
-> A = единицы (1,1,4); pdl> $ A = единицы 1,1,4
-> размер (A) pdl> p $ A-> dims
ответ = 1 1 4 1 1 4
В Scilab нет прямого синтаксиса для массивов ND.
pdl> $ A = pdl [[[1,2,3], [4,5,6]], [[2,3,4], [5,6,7]]]
pdl> p $ A-> затемняет
3 2 2
Поддержка функций.
В Scilab некоторые функции недоступны для массивов ND. В PDL практически любой
функция, поддерживаемая 1D и 2D piddles, в равной степени поддерживается N-мерными
лужи. Обычно нет различий:
Scilab PerlDL
------ ------
-> A = единицы (3,3,3); pdl> $ A = ones (3,3,3);
-> A 'pdl> транспонировать $ A
=> ОШИБКА => ОК
Loop Структуры
Perl имеет много структур циклов, но мы покажем только ту, которая наиболее знакома
Пользователи Scilab:
Scilab PerlDL
------ ------
для i = 1:10 для $ i (1..10) {
disp (i) print $ i
конец }
Внимание Никогда не используйте циклы for для числовой работы. Циклы for в Perl быстрее, чем в Scilab'е,
но они оба бледнеют против «векторизованной» операции. PDL имеет множество инструментов, которые
облегчить написание векторизованных программ. Это выходит за рамки данного руководства. К
дополнительные сведения см. в разделах PDL :: Indexing, PDL :: Threading и PDL :: PP.
Точно так же никогда не используйте 1..10 для числовых вычислений, даже вне цикла for. 1..10 - это
Массив Perl. Массивы Perl созданы для гибкости, а не для скорости. Использовать piddles .
Чтобы узнать больше, см. Следующий раздел.
Piddles vs Perl Массивы
Важно отметить разницу между баловаться и массив Perl. Perl имеет
универсальный объект массива, который может содержать любой тип элемента:
@perl_array = 1..10;
@perl_array = (12, «Привет»);
@perl_array = (1, 2, 3, \ @another_perl_array, последовательность(5));
Массивы Perl позволяют создавать мощные структуры данных (см. Данные структур ниже), но
предназначенный для численный работает. Для этого используйте piddles:
$ pdl = pdl [1, 2, 3, 4];
$ pdl = последовательность 10_000_000;
$ pdl = 600, 600;
Например:
$ points = pdl 1..10_000_000 # 4.7 секунды
$ points = последовательность 10_000_000 # миллисекунд
СОВЕТ: Вы можете использовать символы подчеркивания в числах ("10_000_000" читается лучше, чем 10000000).
Conditionals
В Perl много условных операторов, но мы покажем только наиболее знакомые в Scilab.
пользователей:
Scilab PerlDL
------ ------
если значение> MAX if ($ value> $ MAX) {
disp ("Слишком большой") print "Слишком большой \ n";
elseif значение <MIN} elsif ($ value <$ MIN) {
disp ("Слишком маленький") print "Слишком маленький \ n";
else} else {
disp ("Отлично!") print "Отлично! \ n";
конец }
Внимание Вот такая вот "ошибка":
Scilab: иначе
PerlDL: Эльсиф
Если ваше условие дает синтаксическую ошибку, убедитесь, что вы написали свой "elsif"
правильно.
ТИМТОВДИ (Там Is Ещё Чем Одна Путь к Do Это)
Одно из самых интересных отличий PDL от других инструментов - выразительность.
языка Perl. TIMTOWDI, или «Есть несколько способов сделать это», - это девиз Perl.
Perl был написан лингвистом, и одним из его определяющих свойств является то, что операторы могут
быть сформулированы по-разному, чтобы придать языку более естественный вид. Например, вы
вряд ли скажут другу:
«Пока я не закончу, я буду продолжать работать».
Человеческий язык более гибкий, чем это. Вместо этого вы, скорее всего, скажете:
«Я буду продолжать работать, пока не закончу».
Благодаря своим лингвистическим корням Perl - единственный язык программирования с таким типом
гибкость. Например, в Perl есть традиционные циклы while и if:
while (! finished ()) {
продолжать работать();
}
if (! wife_angry ()) {
kiss_wife ();
}
Но он также предлагает альтернативу до и если не заявления:
до (завершено ()) {
продолжать работать();
}
if (wife_angry ()) {
kiss_wife ();
}
А Perl позволяет писать циклы и условные выражения в "постфиксной" форме:
keep_working () до завершения ();
kiss_wife (), если только wife_angry ();
Таким образом, Perl часто позволяет писать более естественный и простой для понимания код, чем
возможно в более ограниченных языках программирования.
функции
Синтаксис PDL для объявления функций значительно отличается от Scilab'а.
Scilab PerlDL
------ ------
функция retval = foo (x, y) sub foo {
retval = x. ** 2 + x. * y my ($ x, $ y) = @_;
endfunction return $ x ** 2 + $ x * $ y;
}
Не пугайтесь нового синтаксиса. Вот краткий обзор функции
декларация в PDL:
1) "ниже"означает" подпрограмма ".
2) "my"объявляет переменные локальными для функции.
3) "@_"- специальный массив Perl, содержащий все параметры функции. Это может показаться
как странный способ выполнения функций, но он позволяет вам создавать функции, которые принимают
переменное количество параметров. Например, следующая функция принимает любое количество
параметры и складывает их вместе:
суб моя сумма {
мой ($ i, $ total) = (0, 0);
для $ i (@_) {
$ total + = $ i;
}
return $ total;
}
4) Вы можете присвоить значения сразу нескольким переменным, используя синтаксис:
($ a, $ b, $ c) = (1, 2, 3);
Итак, в предыдущих примерах:
# Это объявляет две локальные переменные и инициализирует их равными 0.
мой ($ i, $ total) = (0, 0);
# Это берет первые два элемента @_ и помещает их в $ x и $ y.
мой ($ x, $ y) = @_;
5) Значок "возвращают"оператор возвращает возвращаемое значение функции, если таковое имеется.
ДОПОЛНИТЕЛЬНЫЕ ФУНКЦИИ И ОСОБЕННОСТИ
Данные структур
Для создания сложных структур данных Scilab использует "списки, а такжеСтруктуры". Массивы Perl и
хэши предлагают аналогичную функциональность. Этот раздел представляет собой лишь краткий обзор того, что есть в Perl.
предлагать. Чтобы узнать больше об этом, перейдите наhttp://perldoc.perl.org/perldata.html>
или выполните команду «perldoc perldata».
Массивы
Массивы Perl похожи на списки Scilab'а. Оба они представляют собой последовательную структуру данных.
который может содержать любой тип данных.
Скилаб
------
список (1, 12, «привет», нули (3,3), список (1, 2));
PerlDL
------
@array = (1, 12, "привет", нули (3,3), [1, 2])
Обратите внимание, что массив Perl начинается с префикса «@» вместо символа «$», используемого
лужи.
к изучить о Perl массивы, пожалуйста go в <http://perldoc.perl.org/perldata.html> or
пробег команду "Perldoc perldata ".
Хэш
Хеши Perl похожи на массивы структур Scilab'а:
Скилаб
------
-> drink = struct ('type', 'coke', 'size', 'large', 'myarray', ones (3,3,3)).
-> drink.type = 'спрайт'
-> drink.price = 12 // Добавить новое поле в массив структуры.
PerlDL
------
pdl>% drink = (type => 'coke', size => 'large', mypiddle => ones (3,3,3))
pdl> $ drink {type} = 'спрайт'
pdl> $ drink {price} = 12 # Добавить новое поле в хеш.
Обратите внимание, что хеши Perl начинаются с префикса «%» вместо «@» для массивов и
"$" используется piddles.
к изучить о Perl хеши, пожалуйста go в <http://perldoc.perl.org/perldata.html> or
пробег команду "Perldoc perldata ".
Эффективности
PDL обладает мощными функциями повышения производительности, некоторые из которых обычно недоступны в
средства численных расчетов. На следующих страницах вы узнаете об этих функциях:
PDL :: Индексирование
Уровень: Начинающий
В этом руководстве для начинающих рассматривается стандартная функция "векторизации", которую вы уже
знаю из Scilab. Используйте эту страницу, чтобы узнать, как избежать циклов for для создания вашей программы
более эффективным.
PDL :: Threading
Уровень: Промежуточный
Функция «векторизации» PDL выходит за рамки того, что может делать большинство числовых программ. В
в этом уроке вы узнаете, как «продвигаться» через более высокие измерения, что позволит вам
векторизуйте вашу программу дальше, чем это возможно в Scilab.
тесты
Уровень: Промежуточный
Perl поставляется с простым в использовании модулем тестов, который поможет вам узнать, сколько времени это займет
для выполнения разных частей вашего кода. Это отличный инструмент, который поможет вам сосредоточить свои
усилия по оптимизации. Вы можете прочитать об этом в Интернете
(<http://perldoc.perl.org/Benchmark.html>) или через команду "perldoc
Контрольный показатель ".
PDL :: PP
Уровень: Передовой
Препроцессор PDL - одна из самых мощных функций PDL. Вы пишете функцию
определение в специальной разметке, и препроцессор генерирует реальный код C, который может быть
составлен. С PDL: PP вы получаете полную скорость нативного кода C без необходимости иметь дело
с полной сложностью языка C.
Построение
PDL имеет полнофункциональные возможности построения графиков. В отличие от Scilab, PDL больше полагается на сторонние
библиотеки (pgplot и PLplot) для функций построения 2D-графиков. Его 3D-графика и графика
использует OpenGL для повышения производительности и мобильности. PDL имеет три основных графических модуля:
PDL :: Графика :: PGPLOT
Лучшее для: Построение 2D-функций и наборов данных.
Это интерфейс к почтенной библиотеке PGPLOT. PGPLOT широко используется в
академические и научные сообщества на протяжении многих лет. Отчасти из-за возраста,
PGPLOT имеет некоторые ограничения по сравнению с новыми пакетами, такими как PLplot (например, отсутствие RGB
графика). Но у него есть много особенностей, которые до сих пор делают его популярным в научных кругах.
общинах.
PDL :: Графика :: PLplot
Лучшее для: Построение 2D-функций, а также наборов данных 2D и 3D.
Это интерфейс для графической библиотеки PLplot. PLplot - это современный, открытый исходный код
библиотека для создания научных сюжетов. Он поддерживает графики как 2D, так и 3D наборов данных.
PLplot лучше всего поддерживается для платформ unix / linux / macosx. Имеет активных разработчиков
Сообщество и поддержка платформ win32 улучшаются.
PDL :: Графика :: TriD
Лучшее для: Построение трехмерных функций.
Собственная библиотека 3D-графики PDL, использующая OpenGL в качестве бэкэнда для 3D-графиков и данных.
визуализация. С OpenGL легко манипулировать полученными 3D-объектами с помощью
мышь в реальном времени.
Writing ГПИ
Через Perl PDL имеет доступ ко всем основным инструментам для создания кроссплатформенной платформы.
графический пользовательский интерфейс. Один из популярных вариантов - wxPerl (http://wxperl.sourceforge.net>).
Это привязки Perl для wxWidgets, мощного инструментария с графическим интерфейсом для написания кросс-
платформенные приложения.
wxWidgets разработан для того, чтобы ваше приложение выглядело и ощущалось как родное приложение в
каждая платформа. Например, Perl IDE Отец написан с помощью wxPerl.
Икос / Скикос
Xcos (ранее Scicos) - это средство моделирования и симулятора графических динамических систем. Это часть
стандартного дистрибутива Scilab. PDL и Perl не имеют прямого эквивалента
Scilab's Xcos. Если эта функция важна для вас, вероятно, вам следует сохранить копию
Scilab для этого.
АВТОРСКИЕ ПРАВА
Авторские права 2010 Даниэль Каррера ([электронная почта защищена]). Вы можете распространять и / или изменять это
документ на тех же условиях, что и текущая лицензия Perl.
Увидеть: http://dev.perl.org/licenses/
Используйте PDL :: Scilabp онлайн с помощью сервисов onworks.net