Amazon Best VPN GoSearch

Значок OnWorks

PDL :: QuickStartp - Интернет в облаке

Запустите PDL :: QuickStartp в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это команда PDL :: QuickStartp, которую можно запустить в провайдере бесплатного хостинга OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


PDL :: QuickStart - Краткое знакомство с функциями PDL.

СИНТАКСИС


Краткое описание основных функций PDL и способов их использования.

ОПИСАНИЕ


Введение
Perl - чрезвычайно хороший и универсальный язык сценариев, хорошо подходящий для начинающих и
позволяет быстрое прототипирование. Однако до недавнего времени он не поддерживал структуры данных, которые
позволяет быстро перебирать числа.

Однако с развитием Perl v5 Perl приобрел «Objects». Проще говоря, пользователи
могут определять свои собственные специальные типы данных и писать собственные процедуры для управления ими
либо на языках низкого уровня (C и Fortran), либо в самом Perl.

Разработчики PerlDL полностью использовали это. Модуль «PDL» - это законченный
Объектно-ориентированное расширение Perl (хотя вам не нужно знать, что за объект
использовать его), который позволяет использовать большие N-мерные наборы данных, такие как большие изображения, спектры, время
серии и т. д. для хранения эффективно и манипулировать en масса. Например с PDL
модуль мы можем написать код Perl "$ a = $ b + $ c", где $ b и $ c - большие наборы данных (например,
2048x2048 изображений) и получите результат всего за доли секунды.

Переменные PDL (или, как их теперь называют, «piddles») поддерживают широкий диапазон
основные типы данных - массивы могут быть байтами, короткими целыми числами (со знаком или без знака), длинными
целые числа, числа с плавающей запятой или числа с плавающей запятой двойной точности. А из-за объектно-ориентированного характера
На их основе могут быть получены новые настраиваемые типы данных PDL.

Помимо модулей PDL, которые могут использоваться обычными программами Perl, PerlDL поставляется с
Командная строка Оболочка Perl, называемая «perldl», которая поддерживает редактирование командной строки. В
в сочетании с различными графическими модулями PDL это позволяет легко воспроизводить данные
с и визуализированы.

Помощь
PDL содержит обширную документацию, доступную как в перлдл or pdl2 снаряды и
из командной строки с помощью программы «pdldoc». Для получения дополнительной информации попробуйте один из следующих вариантов:

pdl> help help
$ pdldoc

Также должны быть доступны копии документации в формате HTML. Чтобы узнать их местонахождение, попробуйте
следующие:

pdl> foreach (map {"$ _ / PDL / HtmlDocs"} @ INC) {p "$ _ \ n" if -d $ _}

Perl Типы данных и это PDL продолжается их
Фундаментальные структуры данных Perl - это скалярные переменные, например $ x, которые могут содержать числа.
или строки, списки или массивы скаляров, например @x, и ассоциативные массивы / хэши скаляров,
например,% x.

Perl v5 знакомит с структурами данных и объектами Perl. Простая скалярная переменная $ x теперь будет
определяемый пользователем тип данных или полномасштабный объект (на самом деле он содержит ссылку (умный
"указатель") на это, но это не имеет отношения к обычному использованию perlDL)

Фундаментальная идея perlDL состоит в том, чтобы позволить $ x хранить весь одномерный спектр или двухмерный
изображение, трехмерный куб данных и т. д. вплоть до больших N-мерных наборов данных. Это может быть
манипулируют сразу, например "$ a = $ b + 2" выполняет векторную операцию над каждым значением в
спектр / изображение / и т. д.

Вы можете спросить: «Почему бы просто не сохранить спектр в виде простого списка стилей Perl @x с каждым
пиксель является элементом списка? "Два ключевых ответа на этот вопрос: Память и скорость. Потому что мы
знать, что наш спектр состоит из чистых чисел, мы можем компактно хранить их в одном блоке
памяти, соответствующей числовому массиву в стиле C. Это занимает НАМНОГО меньше памяти, чем
эквивалентный список Perl. Затем этот блок памяти легко передать быстрому добавлению.
подпрограммы или любой другой функции C, которая имеет дело с массивами. В результате perlDL очень
быстро --- например, можно умножить изображение 2048 * 2048 точно за то же время, что и
взял бы на C или FORTRAN (0.1 секунды на моем SPARC). Еще одним преимуществом этого является то, что для
простые операции (например, "$ x + = 2") можно манипулировать всем массивом, не заботясь о
его размерность.

Я считаю, что при использовании perlDL наиболее полезно думать о стандартных переменных Perl @x как о
"списки" общих "вещей" и переменных PDL, таких как $ x, как "массивы", которые могут содержаться
в списках или хешах. Довольно часто в моих сценариях perlDL @x содержит список спектров,
или список изображений (или даже микс!). Или, возможно, можно было бы иметь хэш (например,% x)
изображения ... единственное ограничение - это память!

Переменные perlDL поддерживают ряд типов данных - массивы могут быть байтами, короткими целыми числами.
(со знаком или без знака), длинные целые числа, числа с плавающей запятой или числа с плавающей запятой двойной точности.

Применение
PerlDL загружается в ваш Perl-скрипт с помощью этой команды:

использовать PDL; # в сценариях Perl: используйте стандартные модули perlDL

Также существует множество модулей расширения, например PDL :: Graphics :: TriD. Большинство из них (но
не все, так как иногда это не подходит) следуйте стандартному соглашению. Если вы скажете:

используйте PDL :: Graphics :: TriD;

Вы импортируете из модуля все, что есть в стандартном списке. Иногда вы можете захотеть
ничего не импортировать (например, если вы хотите все время использовать объектно-ориентированный синтаксис и сохранить налог на импорт).
Для этого вы говорите:

используйте PDL :: Graphics :: TriD qw ();

А пустые кавычки «qw ()» распознаются как «ничего». Вы также можете указать
список функций для импорта обычным способом Perl.

Также существует интерактивная оболочка «perldl» или «pdl2», см. перлдл или pdl2 для подробностей.

к Создайте a новый PDL переменная
Вот несколько способов создания переменной PDL:

$ a = pdl [1..10]; # 1D массив
$ a = pdl (1,2,3,4); # То же
$ a = pdl '[1 2 3 4]'; # То же
$ b = pdl [[1,2,3], [4,5,6]]; # 2D массив 3x2
$ b = pdl '[1 2 3; 4 5 6] '; # То же
$ b = pdl q [1,2,3; 4,5,6]; # То же
$ b = pdl <
[1 2 3]
[4 5 6]
НЬЮПДЛ
$ c = pdl q [1-2]; # 2-элементный piddle, содержащий 1 и -2
$ c = pdl q [1-2]; # 2-элементный piddle, содержащий 1 и -2
$ b = pdl 42 # 0-мерный скаляр
$ c = pdl $ a; # Сделать новую копию

$ d = байт [1..10]; # См. "Преобразование типов"
$ e = нули (3,2,4); # 3x2x4 массив с нулевым заполнением

$ c = подходит для файла $; # Прочитать файл FITS

@х = ( PDL(42), нули (3,2,4), rfits ($ file)); # Это СПИСОК переменных PDL!

Команда pdl () функция используется для инициализации переменной PDL из скаляра, списка, списка
ссылка, другая переменная PDL или правильно отформатированная строка.

Кроме того, все функции PDL автоматически преобразуют обычные скаляры Perl в переменные PDL.
на лету.

(также см. разделы «Преобразование типов» и «Ввод / вывод» ниже)

Арифметический логический выражения)
$ a = $ b + 2; $ a ++; $ a = $ b / $ c; # Так далее.

$ c = sqrt ($ а); $ d = log10 ($ b + 100); # Так далее

$ e = $ a> 42; # Vector условное

$ e = 42 * ($ a> 42) + $ a * ($ a <= 42); # Кепка сверху

$ b = $ a-> log10, если нет ($ a <= 0); # избежать ошибки с плавающей запятой

$ a = $ a / (max ($ a) - min ($ a));

$ f = где ($ a, $ a> 10); # где возвращает набор элементов для
# какое условие истинно

print $ a; # $ a в строковом контексте печатает его в N-мерном формате

(и другие операторы / функции Perl)

При использовании piddles в условных выражениях (например, конструкции «if», «if» и «while»)
разрешены только piddles с одним элементом, например

$ a = pdl (1,0,0,1);
print "установлено", если $ a->индекс(2);

Обратите внимание, что логические операторы обычно возвращают многоэлементные элементы. Следовательно
следующее вызовет ошибку

вывести "нормально", если $ a> 3;

так как «$ a> 3» - это элемент с 4 элементами. Скорее используйте все или любое, чтобы проверить, все или любое из
элементы удовлетворяют условию:

выведите «some are> 3», если есть $ a> 3;
выведите «не может логарифмировать», если все $ a> 0;

Есть также много предопределенных функций, которые описаны на других страницах руководства. Проверять
PDL :: Индекс.

матрица Функции
'x' используется как оператор умножения матриц. например, "$ c = $ ax $ b";

perlDL является строкой, а не столбцом, поэтому на самом деле это "c (i, j) = sum_k a (k, j) b (i, k)" -
но когда матрицы напечатаны, результаты будут выглядеть правильно. Просто помните, что индексы
в обратном порядке. например:

$ a = [$ b = [
[1 2 3 0] [1 1]
[1 -1 2 7] [0 2]
[1 0 0 1] [0 2]
] [1 1]
]

дает $ c = [
[1 11]
[8 10]
[2 2]
]

Примечание: транспонировать () делает то, что он говорит, и это удобный способ превратить векторы-строки в
векторы-столбцы.

Как в записывать a декриминализовано функция
субточечный продукт {
мой ($ a, $ b) = @_;
сумма возврата ($ a * $ b);
}
1;

Если поместить в файл dotproduct.pdl, он будет загружен автоматически, если вы используете PDL :: AutoLoader (см.
ниже).

Конечно, эта функция уже доступна как внутренняя функция, см. PDL :: Primitive.

Тип Конверсия
По умолчанию pdl () двойной. Конверсии бывают:

$ a = float ($ b);
$ c = длинный ($ d); # "long" обычно представляет собой 4-байтовое целое число
$ d = байт ($ a);

Также двойной(), короткая(), ushort (), indx ().

ПРИМЕЧАНИЕ. Процедура indx () - это специальный целочисленный тип, который
- правильный размер для значения индекса PDL (размер измерения,
index или offest), который может быть 32-битным (длинным) или
64-битное (longlong) количество в зависимости от того,
построен с поддержкой 32 или 64 бит.

Эти подпрограммы также автоматически преобразуют списки Perl, чтобы обеспечить удобное сокращение:

$ a = байт [[1..10], [1..10]]; # Создать двухмерный байтовый массив
$ a = float [1..1000]; # Создать 1D массив с плавающей запятой

и так далее

услуги печати
Автоматически расширяет массив в N-мерном формате:

print $ a;

$ b = "Ответ = $ a";

Разделы
PDL имеет очень мощные операторы многомерного нарезания и секционирования; увидеть
PDL ::Ломтики(3) справочная страница с подробностями; мы опишем здесь самый важный.

PDL демонстрирует свое наследие Perl / C в том, что массивы имеют нулевое смещение. Таким образом, изображение размером 100x100
индексы «0..99,0..99». (По соглашению центр пикселя (0,0) находится в координате
(0.0,0.0). Все графические функции PDL соответствуют этому определению и скрывают модуль
смещения, например, библиотеки PGPLOT FORTRAN.

В соответствии с обычным соглашением, координата (0,0) отображается в нижнем левом углу, когда
отображение изображения. Он появляется в левом верхнем углу при использовании "" print $ a "" и т. Д.

Простое разбиение на разделы использует расширение синтаксиса Perl, PDL :: NiceSlice, что позволяет вам:
укажите поддиапазоны с помощью модификатора нулевого метода в PDL:

$ b = $ a -> ($ x1: $ x2, $ y1: $ y2, ($ z1)); # Взять подраздел

Здесь $ a - трехмерная переменная, а $ b - планарный вырез, определяемый
ограничивает $ x1, $ x2, $ y1, $ y2 в местоположении $ z1. Скобка вокруг $ z1 вызывает
тривиальный индекс следует опустить - иначе $ b будет трехмерным с третьим
размер порядка 1.

Вы можете поместить фрагменты PDL по обе стороны от оператора поэлементного присваивания ". =", Например
Вс:

# Установите часть $ bigimage в значения из $ smallimage
$ bigimage -> ($ xa: $ xb, $ ya: $ yb). = $ smallimage;

Другой сборник:

$ c = nelem ($ a); # Количество пикселей

$ val = at ($ object, $ x, $ y, $ z ...) # Значение пикселя в позиции, как скаляр Perl
$ val = $ object-> at ($ x, $ y, $ z ...) # эквивалент (синтаксис метода в норме)

$ b = xval ($ a); # Заполняем массив значениями X-координат (также yval (), zval (),
# axisval ($ x, $ axis) и rval () для радиального расстояния
# от центра).

Ввод, вывод
Модули "PDL :: IO" реализуют несколько полезных функций формата ввода-вывода. Это было бы слишком
чтобы привести примеры каждого, но вы можете найти хороший обзор на PDL :: IO. Вот образец
некоторые из поддерживаемых форматов ввода-вывода в PDL.

PDL :: IO :: Разное
Подпрограммы ввода-вывода Ascii, FITS и FIGARO / NDF.

PDL :: IO :: FastRaw
Используя необработанные типы данных вашего компьютера, непереносимый, но невероятно быстрый ввод-вывод
формат. Также поддерживает отображение памяти для экономии памяти и увеличения скорости.

PDL :: IO :: FlexRaw
Общие форматы необработанных данных. Вроде FastRaw, только лучше.

PDL :: IO :: Браузер
Браузер Curses для массивов.

PDL :: IO :: Pnm
Поддержка растровых и растровых изображений Portaple.

PDL :: IO :: Pic
Использование предыдущего модуля и netpbm позволяет легко писать GIF, jpeg
и что угодно с простыми командами.

Графика
Философия perlDL заключается в том, чтобы заставить его работать с разнообразной существующей графикой.
библиотеки, поскольку ни один пакет не удовлетворит все потребности и всех людей, и это позволяет
один для работы с уже знакомыми и любимыми пакетами. Очевидно будут некоторые
частично совпадают по функциональности, а также отсутствует последовательность и единообразие. Однако это позволяет
PDL, чтобы идти в ногу с быстро развивающейся областью - новейшие модули PDL предоставляют интерфейсы
к графике OpenGL и VRML!

PDL :: Графика :: PGPLOT
PGPLOT предоставляет простую библиотеку для линейной графики и отображения изображений.

Для этого есть простой интерфейс во внутреннем модуле PDL :: Graphics :: PGPLOT, который
вызывает подпрограммы в отдельно доступном модуле верхнего уровня PGPLOT.

PDL :: Графика :: PLplot
PLplot предоставляет простую библиотеку для создания графики с несколькими драйверами вывода,
включая драйвер прямого доступа.

Этот модуль обеспечивает как высокоуровневую, так и низкоуровневую функциональность, основанную на PLplot. В
низкоуровневые команды в значительной степени являются прямыми привязками к C-интерфейсу PLplot. Подробнее
в PDL :: Graphics :: PLplot.

PDL :: Графика :: IIS
Многие астрономы любят использовать SAOimage и Ximtool (или их производные / клоны). Эти
полезные бесплатные виджеты для просмотра и визуализации изображений. (Они не
поставляются с perlDL, но могут быть легко получены с их официальных сайтов вне
Сеть.)

Пакет PDL :: Graphics :: IIS позволяет отображать изображения в этих ("IIS"
это имя древнего элемента оборудования для отображения изображений, протоколы которого эти инструменты
соответствовать.)

PDL :: Графика :: TriD
См. PDL :: Graphics :: TriD, это набор трехмерных подпрограмм для OpenGL и (скоро)
VRML и другие 3D-форматы, которые позволяют строить трехмерные точечные, линейные и поверхностные графики из PDL.

Автозагрузка
См. PDL :: AutoLoader. Это позволяет автоматически загружать функции по запросу, возможно,
знакомы пользователям MatLab.

Также можно писать расширения PDL как обычные модули Perl.

PDL оболочек
Сценарий Perl «pdl2» (или «perldl») предоставляет простой интерфейс командной строки для PDL. Если
были установлены последние модули Readlines / ReadKey "pdl2" обнаруживает это и включает
вызов и редактирование командной строки. См. Подробности на странице руководства.

например:

% перлдл
оболочка perlDL v1.354
PDL поставляется с СОВЕРШЕННО ОТСУТСТВИЕМ ГАРАНТИИ. Подробности см. В файле
«КОПИРОВАНИЕ» в распределении PDL. Это бесплатное программное обеспечение, и вы
могут распространять его при определенных условиях, см.
в том же файле.
ReadLines, NiceSlice, MultiLines включены
Чтение PDL / default.perldlrc ...
Найдена база данных документации /home/pdl/dev/lib/perl5/site_perl/PDL/pdldoc.db
Введите 'help' для получения интерактивной справки
Введите demo для онлайн-демонстраций
Загружен PDL v2.4.9_003 (поддерживает неверные значения)
pdl> $ x = rfits 'm51.fits'
Чтение данных ИЗОБРАЖЕНИЯ ...
BITPIX = 32 размер = 147456 пикселей
Чтение 589824 байт
BSCALE = && BZERO =

pdl> используйте PDL :: Graphics :: PGPLOT;
pdl> imag $ x
Отображение изображения 384 x 384 от 40 до 761 с использованием 84 цветов (16-99) ...

Вы также можете запустить его из отладчика Perl ("perl -MPDL -d -e 1"), если хотите.

Разные особенности оболочки:

p Псевдоним оболочки «p» представляет собой удобную короткую форму «print», например

pdl> p единиц 5,3
[
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
]

Инициализация
Файлы "~ / .perldlrc"и" local.perldlrc "(в текущем каталоге) получены, если
нашел. Это позволяет пользователю иметь глобальный и локальный код PDL для запуска.

Помощь
Введите «помощь»! Можно искать в документации PDL и искать документацию по любому
функции.

Побег
Любая строка, начинающаяся с символа «#», рассматривается как escape-оболочку. Этот персонаж
настраивается путем установки переменной Perl $ PERLDL_ESCAPE. Это могло бы, например,
быть установлен в "~ / .perldlrc".

Перегрузка Операторы
Следующие встроенные операторы и функции Perl были перегружены для работы с PDL.
переменные:

+ - * /> <> = <= << >> & | ^ ==! = <=> **%! ~
sin log abs atan2 sqrt cos exp

[Все унарные функции (sin и т. Д.) Могут использоваться с на месте() - см. «Память» ниже.]

Объектная ориентация и perlDL
Операции PDL доступны в виде функций и методов. Таким образом, можно выводить новые типы
объект, представляющий настраиваемые классы данных.

Используя перегрузку, можно заставить математические операторы делать все, что угодно, а PDL
имеет некоторые встроенные уловки, которые позволяют существующим функциям PDL работать без изменений, даже если
базовое представление данных сильно изменилось! См. PDL :: Objects

Память пользования и Рекомендации
Работа с действительно огромными массивами данных может потребовать некоторой осторожности. perlDL предоставляет множество
средства, позволяющие выполнять операции с большими массивами без создания дополнительных копий
хотя это требует от программиста немного больше размышлений и внимательности.

ПРИМЕЧАНИЕ. В большинстве систем лучше настроить Perl (во время создания параметров) на
используйте системную функцию malloc (), а не встроенную в Perl. Это потому, что Perl
one оптимизирован для скорости, а не для потребления виртуальной памяти - это может привести к
увеличение в два раза объема памяти, которую вы можете использовать. Perl malloc
в 5.004 и более поздних версиях есть несколько параметров времени компиляции, которые можно использовать для настройки
поведение.

Простая арифметика
Если $ a - большое изображение (например, занимающее 10 МБ), то команда

$ а = $ а + 1;

съедает еще 10Мб памяти. Это потому, что выражение «$ a + 1» создает
временная копия $ a для хранения результата, тогда $ a назначается ссылка на нее.
После этого исходный $ a уничтожается, поэтому нет постоянный трата памяти. Но на
небольшая машина, увеличение объема памяти может быть значительным. это
очевидно, сделано таким образом, поэтому "$ c = $ a + 1" работает должным образом.

Также, если кто-то говорит:

$ b = $ a; # $ b и $ a теперь указывают на одни и те же данные
$ а = $ а + 1;

Тогда $ b и $ a оказываются разными, как наивно ожидать, потому что новая ссылка
создается, и ему присваивается $ a.

Однако, если $ a был огромным потребителем памяти (например, трехмерным объемом), создание его копии может не
быть хорошим. Можно избежать этих накладных расходов на память в приведенном выше примере, сказав:

$ a ++;

Операции "++, + =, -, - =" и т. Д. Вызывают специальную "на месте" версию
арифметическая подпрограмма. Это означает, что больше памяти не требуется - обратная сторона
что если «$ b = $ a», то $ b также увеличивается. Чтобы явно принудительно создать копию:

$ b = pdl $ a; # Настоящая копия

или, в качестве альтернативы, возможно, лучший стиль:

$ b = $ a-> копировать;

функции
Большинство функций, например "log ()", возвращают результат, который является преобразованием их
аргумент. Это способствует хорошей практике программирования. Однако многие операции могут быть
выполняется "на месте", и это может потребоваться, когда используются большие массивы, а объем памяти
премия. В этих условиях оператор на месте() предоставляется, что предотвращает
дополнительная копия и позволяет изменять аргумент. например:

$ x = журнал ($ массив); # $ array не затронут
журнал (на месте ($ bigarray)); # $ bigarray изменено на месте

ПРЕДУПРЕЖДЕНИЯ:

1. Применяются обычные предостережения относительно дублирования ссылок.

2. Очевидно, что при использовании с некоторыми функциями, которые нельзя применить на месте (например,
"convolve ()") могут возникнуть неожиданные эффекты! Пробуем указать "inplace ()" - безопасно
функции в документации.

3. Преобразование типов, такое как «float ()», может вызвать скрытое копирование.

обеспечение мелочность
Если вы написали простую функцию и не хотите, чтобы она взорвалась вам в лицо, если вы
передайте ему простое число, а не переменную PDL. Просто вызовите функцию topdl () первый
чтобы сделать это безопасным. например:

sub myfiddle {мой $ pdl = topdl (сдвиг); $ pdl-> fiddle_foo (...); ...}

"topdl ()" НЕ выполняет копирование, если передается переменная pdl - она ​​просто не выполняется -
что, очевидно, является желаемым поведением. В обычном режиме, конечно же, нет необходимости.
пользовательские функции, которые не заботятся о внутреннем устройстве.

Используйте PDL :: QuickStartp в Интернете с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

Команды Linux

Ad




×
Реклама
❤️Совершайте покупки, бронируйте или заказывайте здесь — никаких затрат, что помогает поддерживать бесплатность услуг.