Краеугольные камни уничтожения медленного кода в Wolfram Language: ускоряем код в десятки, сотни и тысячи раз

  • Tutorial
Скачать файл с кодом и данные можно в оригинале поста в моем блоге

Картинка к вебинару и посту взята не просто так: в определенном смысле символьное ядро Wolfram Language можно сравнить с Таносом — если бы его мощь была бы направлена в правильное русло, он мог бы стать самым мощным и полезным «добряком». Так же и с символьным ядром Wolfram — его чудовищную мощь нужно правильно использовать, а если это делать не так, оно может стать настоящим «злом», замедляющим все очень сильно. Начинающие разработчики не знают многих важнейших парадигм, идей и принципов языка Wolfram Language, пишут код, который на самом деле дико неэффективен и после этого разочаровываются, хотя тут нет вины Wolfram Language. Эту ситуацию призвана исправить эта статья.

Мне довелось работать с Wolfram Language начиная с (уже довольно далекого) 2005 года (тогда еще была версия Mathematica 5.2, сейчас уже 12-я). За эти почти 15 лет произошло очень много: добавились тысячи новых встроенных функций и областей, в которых они работают (машинное обучение, точная геометрия, работа с аудио, работа в вебе, облачные возможности, глубокая поддержка единиц измерения, интеграция с базами данных Wolfram|Alpha, географические вычисления, поддержка работы с CUDA, Python, распараллеливание операций и многое многое другое), появились новые сервисы — облако Wolfram Cloud, широко известная система вычислительных значeний Wolfram|Alpha, репозиторий функций, репозиторий нейросетей и пр.

За эти годы я применял Wolfram Language очень много (да, ранее, по сути, он назывался Mathematica, до того, как Стивен Вольфрам не решил выделить язык и сделать его общим для целой плеяды своих продуктов) и в разных областях: довелось делать модель продаж для фармацевтической компании; создавать парсеры и автоматические генераторы альбомов о фильмах для индустрии проката кино (когда они еще только зарождались); применять активно в науке (работы по химии и физике твердого тела и теории разрушения); разрабатывать прототипы обучающих систем для платформ отечественного школьного и вузовского образования и ведущих компаний и издательств на этом рынке в России.

Записи некоторых моих выступлений на MBLT DEV и конференциях Wolfram



Это, а вместе с тем то, что я уже несколько лет руковожу своей студией разработки, в которой мы применяем помимо Wolfram Language много чего: JavaScript, Python, Java, PHP и др. — дало мне возможность оценить язык Wolfram глубоко и понять области, в которых ему, пожалуй, особенно нет равных.

В этой статье, которая является компиляцией моего личного опыта и опыта потрясающего разработчика, который сделал очень много для ядра Wolfram Language — Леонида Шифрина (см., скажем, ответ к вопросу "Performance tuning in Mathematica?" — часть этой статьи является её адаптированным и расширенным переводом) — мне хотелось бы развеять мифы относительно скорости языка Wolfram Language — ведь часто разработчики просто, прошу прощения за прямоту, не умеют (не знают) как эффективно использовать его возможности.

Разработчики часто применяют неэффективные конструкции, не используют потрясающие возможности, вроде: распараллеливания, компиляции кода в C или байт-код Wolfram Language, интеграции с CUDA, другими языками вроде Java и C (да, можно подгружать код на этих языках прямо в Wolfram-код).

Это в целом неудивительно, ведь Wolfram Language дает уникальную свободу разработки. Вот, скажем, набор примеров, показывающий 15 способов задать факториал (обратите внимание, как сильно отличается время вычисления функций — показано в какое количество раз оно больше, чем у встроенной функции Factorial):

Код
Module[{st, stInput, data, systemFunction}, 
st=Style[#, FontFamily->"Arial", Gray, FontSize->14]&;

SetAttributes[stInput, HoldAll];

stInput[code_]:=(Clear[f];

code;

{Style[HoldForm@code, "Input", FontSize->14, Background->None], code;

RepeatedTiming[f[9];

, 2][[1]]});

data=Flatten/@{
{st@"Ядро Wolfram", stInput[f=Factorial]}, 
{"", stInput[f[n_]:=n!]}, 
{st["Правила замены"], stInput[f[n_]:=n f[n-1];

f[1]=1]}, 
{st["Процедурный"], stInput[f[n_]:=Module[{t=1}, Do[t=t*i, {i, n}];

t]]}, 
{"", stInput[f[n_]:=Module[{t=1, i}, For[i=1, i<=n, i++, t*=i];

t]]}, 
{st["На списках (массивах)"], stInput[f[n_]:=Apply[Times, Range[n]]]}, 
{"", stInput[f[n_]:=Fold[Times, 1, Range[n]]]}, 
{st["Рекурсивный"], stInput[f[n_]:=If[n==1, 1, n*f[n-1]]]}, 
{st["Функциональный"], stInput[f=If[#1==1, 1, #1*#0[#1-1]]&]}, 
{"", stInput[f[n_]:=Fold[#2[#1]&, 1, Array[Function[t, #t]&, n]]]}, 
{st["Конструктивный"], stInput[f[n_]:=Length[Permutations[Range[n]]]]}, 
{st["Правила замены (шаблоны)"], stInput[f[n_]:=First[{1, n}//.{a_, b_/;

b>0}:>{b*a, b-1}]]}, 
{st["На строках"], stInput[f[n_]:=StringLength[Fold[StringJoin[Table[#1, {#2}]]&, "A", Range[n]]]]}, 
{st["Математический"], stInput[f[n_]:=Gamma[n+1]]}, 
{"", stInput[f[n_]:=Product[i, {i, n}]]}
};

systemFunction=data[[1, 3]];

Framed[#, Background->White, FrameMargins->5, FrameStyle->None]&@Grid[{Style[st[#], Bold]&/@{"Парадигма", "Код", "Медленнее встроенной\nфункции,  раз"}}~Join~({#[[1]], #[[2]], st[Round[#[[3]]/systemFunction, 1/10]//N]}&/@data), 
Alignment->{{Center, Left, Left}, Center}, 
Dividers->{None, {None, {LightGray}, None}}, Background->{None, {LightOrange, None}}
]]



Эта статья призвана помочь вам писать красивый и эффективный код, который будет работать ни чуть не медленнее, чем, скажем, в популярном Python. Знания этих принципов и приемов позмоляет писать код на Wolfram Language, который будет не особо медленнее кода на C, но за счет широты языка разработку вести в нем намного быстрее и проще.

В конце статьи вы найдете ссылки на полезные ресурсы для изучения языка Wolfram Language.

Поскольку Wolfram Language (Mathematica и другие системы, основанные на нем) — символьный язык программирования, который имеет символьный вычислительный движок, гораздо более общий, чем, скажем, в том же Matlab (Sympy, Maxima, Maple и пр.), неудивительно, что настройка производительных вычислений в нем иногда бывает более сложной. Существует, однако, множество техник, но все они сводятся, в основном, к главному принципу, который звучит так:

Избегайте полного цикла символьных вычислений в Wolfram Language, насколько это возможно.

1. Базовые принципы


1.1. Применяйте везде, где это возможно, встроенные функции


Так как они реализованы непосредственно в ядре Wolfram на низкоуровневых языках (С и Java), они обычно (но не всегда!) намного быстрее, чем созданные вами функции для решения той же задачи. Чем более специализированную функцию для конкретной задачи вы применяете, тем выше шансы, что вы ускорите код.

ClearAll[data];

data=RandomReal[1, {10^6, 2, 2}];

compareTiming[{Map[Flatten, data], Flatten[data, {{1}, {2, 3}}]}]



1.2. Используйте функциональное программирование (Map /@, Apply @@ и им подобные)


Также используйте чистые функции (лямбда-исчисление) на основе нотации #-&, когда это возможно — они, как правило, быстрее, чем функции функции с именованными аргументами (на основе Function) или функции, основанные на правилах замены (особенно для функций, не требующих интенсивных вычислений, которые применяются к большим спискам).

ClearAll[data];

data=Range[1, 10^6];

compareTiming[{f[x_]:=x^2;

Table[f[i], {i, data}], Map[#^2&, data]}]



1.3. Используйте структурные и векторизованные операции


Применяйте Transpose, Flatten, Partition, Part и т. п. — они быстрее, чем функциональные.

ClearAll[data];

data=RandomReal[1, {10^5, 2}];

compareTiming[{{#[[1]], #[[2]]^2}&/@data, Transpose[{#1, #2^2}&@@Transpose[data]]}]



1.4. Избегайте использования процедурного стиля программирования


Не применяйте циклы и т. п, так как этот стиль программирования имеет тенденцию разбивать большие структуры на части (индексирование массива и т. п.). Это «выталкивает» значительную часть вычислений из ядра и поэтому сильно замедляет их.

ClearAll[fibonacci, f];

compareTiming[{fibonacci={1, 1};

n=3;

While[n<=20000, AppendTo[fibonacci, fibonacci[[n-1]]+fibonacci[[n-2]]];

n++];

fibonacci, f[1]=1;

f[2]=1;

f[n_]:=f[n]=f[n-1]+f[n-2];

f/@Range[20000]}]



2. Используйте машинную точность, всегда, когда это возможно


В большинстве языков программирования просто нет таких понятий, как точные константы, вроде 6/47 или каких бы то ни было символьных выражений. Поэтому применяя их нужно быть аккуратным и понимать, как работает процесс вычислений, чтобы не использовать абсолютную точность, когда это не нужно.

2.1. Не применяйте абсолютную точность там, где это не нужно


Скажем, если вы строите график, вам нет необходимости применять точную арифметику.

compareTiming[{data=Table[{x, Sin[x]/Gamma[x]}, {x, 0, 10, 1/100}];

ListPlot[data], data=Table[{x, Sin[x]/Gamma[x]}, {x, 0, 10, 1/100.}];

ListPlot[data]}]



В примере выше изменено только одно место — 100 заменено на 100. — первое число имеет абсолютную точность, а второе — машинную. Но от этого вычисления ускорились в 4 раза! Вот, собственно, как выглядят данные.

Table[{x, Sin[x]/Gamma[x]}, {x, 0, 10, 1/2}]
Table[{x, Sin[x]/Gamma[x]}, {x, 0, 10, 1/2.}]





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

2.2. Применяйте машинную точность до символьных преобразований


Также нужно помнить, что по умолчанию система делает все символьно и это может занять много времени. Скажем, вы хотите решить уравнение $ax^3+bx+c=0$ при заданном наборе значений a, b, c. Вы можете сделать вот так:

Solve[a x^3+b x+c==0, x]/.{a->1.23, b->3.45, c->2.6}



И вы удивитесь, почему чуть иначе написанный код будет быстрее в 15 раз:

compareTiming[{Solve[a x^3+b x+c==0, x]/.{a->1.23, b->3.45, c->2.6}, Solve[a x^3+b x+c==0/.{a->1.23, b->3.45, c->2.6}, x]}]



Все дело как раз в том, что в первом примере Wolfram Language сначала ищет точное решение и затем подставляет в него численные значения коэффициентов:

Solve[a x^3+b x+c==0, x]



Solve[a x^3+b x+c==0, x]/.{a->1.23, b->3.45, c->2.6}



Во втором случае ищется решение сразу численными методами:

a x^3+b x+c==0/.{a->1.23, b->3.45, c->2.6}



Solve[a x^3+b x+c==0/.{a->1.23, b->3.45, c->2.6}, x]



2.3. Не мешайте числа с разной точностью


Если в вашем списке есть числа с разной точностью — он автоматически будет распакован и будет работать в сотни раз медленнее (см. ниже про упакованные массивы). Приводите числа к одинаковой точности с помощью таких функций как N, Rationalize, Round, Floor, Ceiling, SetPrecision, SetAccuracy.

3. Компиляция, листабилити, распараллеливание и CUDA


3.1. Помните про листабилити


Листабилити (Listability) — это применение функции к массиву, каждому её элементу автоматически. Так как в Wolfram Language массивы называются List — отсюда название. В принципе, можно назвать также это векторизацией.

Помните, что многие встроенные функции листабильны, а значит применение их к большим спискам предпочтительнее применения конструкций вроде Map или циклов.

ClearAll[data];

data=RandomReal[{-Pi, Pi}, 10^7];

compareTiming[{Sin/@data, Sin[data]}]



3.2. Используйте компиляцию на основе Compile


Используйте компиляцию всегда, когда это возможно. Применяйте компиляцию в C-код (для этого потребуется доустановить компилятор, можно установить Visual C++ Build Tools 2017 — подробнее о том, как это сделать, см. здесь). Делайте ваши компилированные функции листабельными (RuntimeAttributes) и распараллеленными (Parallelization).

ClearAll[data];

data=Range[-50, 50, 0.001];

Оригинальная функция:

fNotCompiled=Function[{x}, Block[{sum=1.0, inc=1.0}, Do[inc=inc*x/i;

sum=sum+inc, {i, 100}];

sum]];

Фунция, скомпилированная в байт-код Wolfram Language (JIT-компиляция) (далее будем ее называть JIT-функция)

fJITCompiled=Compile[{{x}}, Block[{sum=1.0, inc=1.0}, Do[inc=inc*x/i;

sum=sum+inc, {i, 100}];

sum]];

JIT-функция с возможностью распараллеливания:

fJITCompiledParallelized=Compile[{{x}}, Block[{sum=1.0, inc=1.0}, Do[inc=inc*x/i;

sum=sum+inc, {i, 100}];

sum], Parallelization->True];

JIT-функция с листабилити:

fJITCompiledListable=Compile[{{x}}, Block[{sum=1.0, inc=1.0}, Do[inc=inc*x/i;

sum=sum+inc, {i, 100}];

sum], RuntimeAttributes->{Listable}];

JIT-функция с листабилити и распараллеливанием:

fJITCompiledListableParallelized=Compile[{{x}}, Block[{sum=1.0, inc=1.0}, Do[inc=inc*x/i;

sum=sum+inc, {i, 100}];

sum], Parallelization->True, RuntimeAttributes->{Listable}];

Фунция, скомпилированная в код C (остальные аналогично):

fСCompiled=Compile[{{x}}, Block[{sum=1.0, inc=1.0}, Do[inc=inc*x/i;

sum=sum+inc, {i, 100}];

sum], CompilationTarget->"C"];

fСCompiledParallelized=Compile[{{x}}, Block[{sum=1.0, inc=1.0}, Do[inc=inc*x/i;

sum=sum+inc, {i, 100}];

sum], CompilationTarget->"C", Parallelization->True];

fСCompiledListable=Compile[{{x}}, Block[{sum=1.0, inc=1.0}, Do[inc=inc*x/i;

sum=sum+inc, {i, 100}];

sum], CompilationTarget->"C", RuntimeAttributes->{Listable}];

fСCompiledListableParallelized=Compile[{{x}}, Block[{sum=1.0, inc=1.0}, Do[inc=inc*x/i;

sum=sum+inc, {i, 100}];

sum], CompilationTarget->"C", Parallelization->True, RuntimeAttributes->{Listable}];

Теперь посмотрим на все варианты (по сути одной и той же функции!) работы функции и её разных компилированных версий. Как видно, ускорение просто от оборачивания функции и использования компиляции в C ускоряет её более чем в 50 раз!

compareTiming[
{fNotCompiled/@data, 
fJITCompiled/@data, 
fJITCompiledListable@data, 
fJITCompiledParallelized/@data, 
fJITCompiledListableParallelized@data, 
fСCompiled/@data, 
fСCompiledListable@data, 
fСCompiledParallelized/@data, 
fСCompiledListableParallelized@data}]



Когда вы применяете Compile может случиться так, что компилированная функция имеет «утечки», когда часть вычислений перестает быть компилированной. Примеры борьбы с этим явлением вы можете найти в MathGroup.

3.3. Применяйте векторизированные операции внутри Compile


Когда это возможно, используйте векторизованные операции (UnitStep, Clip, Sign, Abs и т. д.) внутри компилированной функции, создаваемой с помощью Compile, чтобы реализовать конструкции «векторизованного порядка выполнения (блок-схемы)», такие как If, чтобы избежать явных циклов (по крайней мере, в самых глубоковложенных циклах) внутри Compile. Это может дать вам скорость уже не байт-кода Wolfram Language, а почти родную скорость C во многих случаях.

f1Compiled=Compile[{{x, _Real}}, SeedRandom[1];

Block[{data}, data=RandomReal[{-x, x}, 10^5];

Table[If[data[[i]]>0, 1, 0], {i, 1, Length[data]}]], CompilationTarget->"C", Parallelization->True];

f2Compiled=Compile[{{x, _Real}}, SeedRandom[1];

Block[{data}, data=RandomReal[{-x, x}, 10^5];

UnitStep@data], CompilationTarget->"C", Parallelization->True];

compareTiming[{f1Compiled@10, f2Compiled@10}]



3.4. Распараллеливание


Применяйте распараллеливание — для базовых нужд оно крайне просто реализовано, хотя есть множество настроек. Для начала просто запомните, главные функции: Parallelize, ParallelMap, ParallelTable.

compareTiming[{Table[Solve[Sin[n x+n^2]==0, x], {n, 1, 100}], ParallelTable[Solve[Sin[n x+n^2]==0, x], {n, 1, 100}]}]



3.5. CUDA, OpenCL — вычисления с помощью графических процессоров (видеокарт)


Вы можете писать программы, основанные на технологиях CUDA и OpenCL. Производительность этих программ, естественно, будет соответствующей. Также можно использовать готовые программы на этих языках.

4. Имейте ввиду, что списки ({...} или List) реализованы в Wolfram Language, как массивы


4.1. Выделяйте большие списки, чтобы обрабатывать их «целиком», как описано выше.


Если у вас есть необходимость обрабатывать списки разного размера и содержимого, то особенно аккуратно нужно относиться к большим спискам. Иногда, список из 100-1000 элементов тоже может быть большим, например, если его элементами являются объекты XMLObject, получающиеся от импорта веб-страниц, каждый из которых весит килобайты, сотни килобайт или даже мегабайты.

4.2. Избегайте применять Append, Prepend, AppendTo и PrependTo в циклах


Не стоит применять функции Append, Prepend, AppendTo and PrependTo в циклах, для создания списков и т. п. — так как они создают копию всего списка, чтобы добавить единственный элемент, что приводить к квадратичной, а не линейной сложности конструирования списков.

compareTiming[{list={};

n=1;

While[n<=10000, list=Append[list, n++]];

list, Range[1, 10000]}]



4.3. Используйте связанные списки


Применяйте «связанные списки» (конструкции, типа {1,{2,{3,{}}}}) вместо «плоских» списков (типа {1,2,3,4}) для накопления элементов списка в программах.

Простая конструкция для накопления элементов выглядит так: A = {new element, A}.

Так как A — это ссылка, отдельное присваивание осуществляется за одинаковое время.

compareTiming[{list1={};

Table[If[PrimeQ[i], list1=list1~Join~{i}], {i, 1, 100000}];

list1, list2={};

Table[If[PrimeQ[i], list2={list2, i}], {i, 1, 100000}];

Flatten@list2}]



4.4. Сопоставление по шаблону в последовательности шаблонов


Не забывайте о том, что сопоставление по шаблону (Pattern matching) для шаблонов, задающих последовательность выражений (__ BlankSequence и ___ BlankNullSequence) также основывается на том, что последовательности (Sequence) являются массивами. Таким образом, скажем, правило {fst_,rest___}:>{f[fst],g[rest]} скопирует весь список и только потом будет применяться. В частности, не используйте рекурсию таким образом, который может выглядеть естественным в других языках. Если вы хотите использовать рекурсию в списках, сначала преобразуйте свои списки в связанные списки (см. выше).

5. Избегайте неэффективные шаблоны. Создавайте их правильно.


Для того, чтобы лучше понимать, что такое шаблоны (Patterns) в Wolfram Language рекомендую посмотреть мой урок:


5.1. Используйте аккуратно правила замены


Программирование на основе правил замены может быть как очень быстрым, так и очень медленным, в зависимости от того, как вы строите свои вычисления и правила замены, но на практике легче нечаянно замедлить его.

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

Хорошим примером является сортировка элементов:

list //. {left___, x_, middle__, y_, right__} /; x > y :> {left, y, middle, x, right};

Не забывайте о SequenceCases, SequencePosition, SequenceCount, SequenceReplace, специально оптимизированных для работы с массивами, которые появились в версии 10.1 языка Wolfram.

5.2. Структуры данных и сопоставитель шаблонов


Старайтесь создавать эффективные шаблоны и соответствующие им структуры для хранения ваших данных, что позволит механизму сопоставления с шаблоном тратить как можно меньше времени на ложные попытки сопоставления.

ClearAll[data];

data=RandomInteger[{0, 100}, {10^6, 2}];

compareTiming[{data/.{p:({x_/;

x>90&&PrimeQ[x], y_/;

y>34})/;

x^2+y^2>1000:>p, t:{_, _}:>Nothing}, ((data/.{_, y_/;

y<=34}:>Nothing)/.{x_/;

(x<=90||Not[PrimeQ[x]]), _}:>Nothing)/.({x_, y_}/;

x^2+y^2<=1000)->Nothing, 
Cases[Cases[Cases[data, {x_/;

x>90&&PrimeQ[x], _}], {_, y_/;

y>34}], {x_, y_}/;

x^2+y^2>1000]}]



5.3. Используйте аккуратно правила замены


Избегайте использования шаблонов с вычислительно интенсивными условиями или тестами. Сопоставитель шаблонов даст вам максимальную скорость, если шаблоны в основном синтаксические по своей природе (структура теста, головной части выражения и т.д.). Каждый раз, когда применяется условие ( / ;) или тест шаблона (?), для каждого потенциального соответствия шаблону, вычислительное ядро вызывается сопоставителем шаблонов, и это замедляет его.

ClearAll[data];

data=RandomSample[{##}]&@@@Transpose[{RandomInteger[{0, 100}, 10^5], RandomReal[{0, 100}, 10^5]}];

compareTiming[{Cases[data, {_Integer, x_/;

Sin[x]<FractionalPart[x]}], Module[{preData, seconds}, preData=Cases[data, {_Integer, _}];

seconds=Developer`ToPackedArray[preData[[;;, 2]]];

Pick[preData, UnitStep[FractionalPart[seconds]-Sin[seconds]], 1]]}]



6. Работа со списками


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

Одна универсальная встроенная функция, которая не создает копии списка (или выражения), а изменяет исходное выражение и не имеет этой проблемы — это [[...]] (Part).

6.1. Аккуратно применяйте функции, модифицирующие списки


Избегайте использования большинства встроенных функций, которые меняют списки для большого количества небольших независимых модификаций списка.

compareTiming[{NestWhile[Drop[#, 1]&, Range[1000], (Length[#]>10)&], Drop[Range[1000], 990]}]



6.2. Расширенный функционал Part


Используйте расширенные функциональные возможности Part для одновременного извлечения и изменения большого количества элементов списка (или более общего выражения). Это очень быстро, и не только для упакованных числовых массивов (Part изменяет исходный список).

Простейший пример выглядит так:

list={1, 2, 3, 4, 5};

list[[{1, 3}]]=list[[{4, 1}]];

list



Вот простой пример — изменить элементы списка в соответствии с заданным порядком:

ClearAll[list1, list2];

list1=Range[1000000];

list2=list1;

newArrangement=RandomSample[list1];

compareTiming[{list1=Table[list1[[i]], {i, newArrangement}];

list1, 
list2=list2[[newArrangement]];

list2}]



6.3. Используйте Extract


Используйте Extract для извлечения сразу нескольких элементов на разных уровнях, причем список позиций может быть очень большим.

ClearAll[list1, list2];

list=Range[10000000];

elems=RandomInteger[{1, 10000000}, 10000];

compareTiming[{Table[list[[elems[[i]]]], {i, 1, Length@elems}], 
Extract[list, List/@elems]}]



7. Используйте эффективные встроенные форматы данных


7.1. Упакованные массивы


Для того, чтобы упаковать массив его достаточно обернуть в Developer`ToPackedArray. Чтобы проверить упакованность массива служит функция Developer`PackedArrayQ.

ClearAll[data];

data=RandomInteger[{0, 1}, 10^6];

dataUnPacked=data~Join~{1.};

dataPacked=Developer`ToPackedArray[N[data]~Join~{1.}];

compareTiming[{Total[dataUnPacked], Total[dataPacked]}]




7.2. Разреженные массивы


Безусловно, если ваша матрица разреженная, то, безусловно, держать её в памяти и обращаться к ней становится неэффективным. Для работы с такими объектами существует функция SparseArray.

sparseArray=SparseArray[RandomInteger[{1, 100}, {100, 2}]->RandomReal[{0, 10}, 100], {100, 100}];

notSparseArray=Normal@sparseArray;

compareTiming[{Det@notSparseArray, Det@sparseArray}]



7.3. Хеш-таблицы


Начиная с версии 10 в Wolfram Language появились неизменяемые ассоциативные массивы, которые называются ассоциациями <|...|> (Association).

Тот факт, что они неизменяемы, не мешает им эффективно вставлять и удалять пары ключ-значение («дешевые копии», отличающиеся от исходной ассоциации наличием или отсутствием данной пары ключ-значение). Они представляют собой идиоматические ассоциативные массивы в Wolfram Language и имеют очень хорошие характеристики производительности.

assoc=<|a->1, b->2, c->3, d->4, e->5|>;

assoc[d]+assoc[a]



Также не забывайте про Dataset — это объект, который можно назвать внутренним форматом базы данных языка Wolfram Language.


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


8. Применяйте кэширование, ленивые вычисления и динамическое программирование


8.1. Кеширование значений функций (мемоизация) и выгрузка определений функций на жесткий диск


Оно крайне просто реализовано в Wolfram Language и может сохранить вам просто астрономическое количество времени.

Простейший принцип работы выглядит так: вместо конструкции f[x_]:=functionBody используется f[x_]:=f[x]=functionBody — при этом функция не просто вычисляет значение при заданном значении аргумента, но и запоминает его. Поэтому вычисления требуются 1 раз, после этого их можно использовать и, если нужно, выгрузить на жесткий диск с помощью Save или DumpSave.

ClearAll[f1, f2];

f1[x_]:=(Pause[0.1];

x^2);

f2[x_]:=f2[x]=(Pause[0.1];

x^2);

compareTiming[{f1/@{1, 1, 1, 1, 1}, f2/@{1, 1, 1, 1, 1}}]



8.2. Замыкания (closures)


Wolfram Language позволяет реализовать более сложные версии мемоизации, где вы можете определить функции (замыкания) непосредственно во время их выполнения, которые будут использовать некоторые предварительно вычисленные части в своих определениях и, следовательно, будут быстрее.

ClearAll[f1, f2]

f1[x_]:=(y/.Solve[y^2+x y+x==0, y]);

Module[{solution=FullSimplify@Solve[y^2+x y+x==0, y]}, 
f2[xValue_]:=(y/.solution)/.x->xValue];

compareTiming[{Table[f1[x], {x, 0, 100}], Table[f2[x], {x, 0, 100}]}]



8.3. Ленивые вычисления


Ленивые или отсроченные вычисления реализуются в Wolfram Language через конструкции := (SetDelayed), а для правил замены через :> (RuleDelayed). Они являются «естественными» для языка и позволяют вызывать функции, только когда они нужны и не вычислять их заранее, в отличие от заданий с помощью = (Set) и -> (Rule). Однако, важно понимать разницу и применять каждый тип верно.

ClearAll[f1, f2]

f1[x_]:=(y/.FullSimplify[Solve[y^2+x y+x==0, y]]);

f2[x_]=(y/.FullSimplify[Solve[y^2+x y+x==0, y]]);

compareTiming[{Table[f1[x], {x, 0, 100}], Table[f2[x], {x, 0, 100}]}]



9. Прочие замечания


9.1. Используйте сцепку функций Reap + Sow для сбора данных в процессе вычислений


Reap и Sow обеспечивают эффективный способ сбора промежуточных результатов, причем их можно «помечать» тэгами, для сбора необходимых результатов. Эти команды также хорошо сочетаются с функциональным программированием.


9.2. Все есть символьная констукция


В Wolfram Language все имеет символьное представление, даже картинки, код и документы Mathematica. Это дает потрясающие возможности для метапрограммирования и автоматизации самых разных задач. Но об этом всегда важно помнить. Полную форму выражения можно посмотреть с помощью конструкции FullForm.

FullForm[{{1, 2}, {3, {4}}, {{5}}}]



FullForm[Hold[x5+y2+1/z+4/2]]




9.3. Дуализм позиции и элемента


Часто вы можете написать более быстрые функции для работы с позициями элементов, а не с самими элементами, поскольку позиции являются целыми числами (для плоских списков). Это может дать вам ускорение на порядок даже по сравнению со встроенными функциями.

9.4. Отключите $HistoryLength


По умолчанию Wolfram Language помнит все вычисления, сделанные в текущей сессии. Это может сильно мешать работы и контролируется параметром $HistoryLength.


Преимущества языка Wolfram Language в скорости разработки


Мы подробно обсудили технические детали — как применяя те или иные приёмы ускорить код, или сразу писать его эффективным. Однако, есть одна важная сторона разработки на Wolfram Language, которая остается обычно незамеченной: высокая скорость разработки и прототипирования.

Дело в том, что внутри систем, таких как Wolfram Mathematica, Wolfram Cloud, Wolfram One и пр. реализована интерактивная среда разработки, которую вы можете кастомизировать под себя и делать то, что можно назвать «интерактивной книгой». Скажем эта статья изначально написана на Wolfram Language в Wolfram Mathematica, после не особенно сложный обработчик конвертирует документ, который готов полностью для публикации в моем блоге и здесь, на Хабре. Он делает все: готовит и выгружает иллюстрации на сервер, сохраняет документ в некскольких форматах, с учетом разницы платформ и пр.

Такого рода примеров можно привести очень много и все они сводятся до простой мысли: если у вас очень много разнородных задач, требующих работы в самых разных областях или вы хотите расширить свои горизонты и возможности разработки — Wolfram Language отлично подойдет для этого. Равно как он подойдет компаниям, которым необходимо быстро и качественно имплементировать у себя сложный, нагруженный специфическими вычислениями движок.

Если коротко, то можно отметить следующие ключевые возможности, благодаря которым разработка на Wolfram Language экономит массу времени на разработке:

  • Гигантское количество встроенных функций, покрывающих очень много областей (от символьной математики (интегралов, рядов, доказательства теорем и геометрии) до географических вычислений или создания облачных сервисов). Для того, чтобы оценить этот функционал — просто откройте документацию и поизучайте её хотя бы минут 15, вы убедитесь в этом сами.

    На картинке ниже показаны области, в которых работает Wolfram Language вместе с количеством функций, которые относятся к этой области. Всего на данный момент (в версии 12.0) доступно 5436 функций из 188 областей. Под картинкой в спойлере вы можете посмотреть их перечисление по областям.


data=SortBy[#,-Length[#]&]&@GroupBy[Flatten[Thread/@EntityValue[WolframLanguageData[],{name,functionality areas}],1],Last,Sort[#[[;;,1]]]&];

Framed[Labeled[Style["Области применения Wolfram Language и количество функций, относящихся к ним\n",30,FontFamily->"Intro Regular"],#],Background->GrayLevel[0.95],FrameMargins->5,FrameStyle->None]&@WordCloud[KeyValueMap[{StringRiffle[StringCases[#1,RegularExpression["[A-Z][a-z]+"]]/."Symbols"->""," "]<>" ("<>ToString[Length@#2]<>")",N@Length@#2}&,data],ImageSize->{1200,800},Background->GrayLevel[0.95],WordOrientation->{{-Pi/4,0,Pi/4}},MaxItems->All,WordSpacings->3,FontFamily->"Intro Regular"]



Export[FileNameJoin[{NotebookDirectory[], "fileNames.nb"}], Notebook@Flatten@KeyValueMap[{Cell[#1<>" ("<>ToString[Length[#2]]<>")", "Title"], Cell[BoxData@ToBoxes@Row[Map[Hyperlink[#, "http://reference.wolfram.com/language/ref/"<>#<>".html"]&, #2], ",  "], "Text"]}&, data]];


Функции Wolfram Language по областям

Math Functions (279)


AiryAi, AiryAiPrime, AiryAiZero, AiryBi, AiryBiPrime, AiryBiZero, AlternatingFactorial, AngerJ, AppellF1, ArithmeticGeometricMean, BarnesG, BellB, BellY, BernoulliB, BernsteinBasis, BesselI, BesselJ, BesselJZero, BesselK, BesselY, BesselYZero, Beta, BetaRegularized, BlomqvistBeta, BSplineBasis, CarmichaelLambda, CatalanNumber, ChampernowneNumber, ChebyshevT, ChebyshevU, ClebschGordan, Clip, CoshIntegral, CosIntegral, CubeRoot, Cyclotomic, DawsonF, DedekindEta, DiracComb, DirichletBeta, DirichletCharacter, DirichletEta, DirichletL, DirichletLambda, DiscreteDelta, DivisorSigma, EllipticE, EllipticExp, EllipticExpPrime, EllipticF, EllipticK, EllipticLog, EllipticNomeQ, EllipticPi, EllipticTheta, EllipticThetaPrime, Erf, Erfc, Erfi, EulerE, EulerPhi, ExpIntegralE, ExpIntegralEi, Factorial, Factorial2, FactorialPower, Fibonacci, Fibonorial, FractionalPart, FresnelC, FresnelF, FresnelG, FresnelS, Gamma, GammaRegularized, GegenbauerC, GoodmanKruskalGamma, Gudermannian, HankelH1, HankelH2, HarmonicNumber, Haversine, HeavisideLambda, HeavisidePi, HeavisideTheta, HermiteH, HurwitzLerchPhi, HurwitzZeta, Hyperfactorial, Hypergeometric0F1, Hypergeometric0F1Regularized, Hypergeometric1F1, Hypergeometric1F1Regularized, Hypergeometric2F1, Hypergeometric2F1Regularized, HypergeometricPFQ, HypergeometricPFQRegularized, HypergeometricU, InverseBetaRegularized, InverseEllipticNomeQ, InverseErf, InverseErfc, InverseGammaRegularized, InverseGudermannian, InverseHaversine, InverseJacobiCD, InverseJacobiCN, InverseJacobiCS, InverseJacobiDC, InverseJacobiDN, InverseJacobiDS, InverseJacobiNC, InverseJacobiND, InverseJacobiNS, InverseJacobiSC, InverseJacobiSD, InverseJacobiSN, InverseWeierstrassP, JacobiAmplitude, JacobiCD, JacobiCN, JacobiCS, JacobiDC, JacobiDN, JacobiDS, JacobiNC, JacobiND, JacobiNS, JacobiP, JacobiSC, JacobiSD, JacobiSN, JacobiSymbol, JacobiZeta, KelvinBei, KelvinBer, KelvinKei, KelvinKer, KendallTau, KleinInvariantJ, KroneckerDelta, KroneckerSymbol, LaguerreL, LegendreP, LegendreQ, LerchPhi, LiouvilleLambda, Log10, Log2, LogBarnesG, LogGamma, LogIntegral, LogisticSigmoid, LucasL, MangoldtLambda, MarcumQ, MathieuC, MathieuCharacteristicA, MathieuCharacteristicB, MathieuCharacteristicExponent, MathieuCPrime, MathieuS, MathieuSPrime, MeijerG, MinkowskiQuestionMark, Minus, MittagLefflerE, ModularLambda, MoebiusMu, Multinomial, MultiplicativeOrder, NevilleThetaC, NevilleThetaD, NevilleThetaN, NevilleThetaS, NextPrime, NorlundB, OwenT, ParabolicCylinderD, PartitionsP, PartitionsQ, Pochhammer, PolyGamma, PolygonalNumber, PolyLog, PrimeNu, PrimeOmega, PrimePi, PrimeZetaP, PrimitiveRoot, ProductLog, QBinomial, QFactorial, QGamma, QHypergeometricPFQ, QPochhammer, QPolyGamma, Quotient, RamanujanTau, RamanujanTauL, RamanujanTauTheta, RamanujanTauZ, Ramp, RealAbs, RealSign, RecurrenceTable, Rescale, RiemannR, RiemannSiegelTheta, RiemannSiegelZ, RiemannXi, SawtoothWave, ScorerGi, ScorerGiPrime, ScorerHi, ScorerHiPrime, SiegelTheta, Sinc, SinhIntegral, SinIntegral, SixJSymbol, SpearmanRho, SphericalBesselJ, SphericalBesselY, SphericalHankelH1, SphericalHankelH2, SphericalHarmonicY, SpheroidalEigenvalue, SpheroidalJoiningFactor, SpheroidalPS, SpheroidalPSPrime, SpheroidalQS, SpheroidalQSPrime, SpheroidalRadialFactor, SpheroidalS1, SpheroidalS1Prime, SpheroidalS2, SpheroidalS2Prime, Sqrt, SquareWave, StieltjesGamma, StirlingS1, StirlingS2, StruveH, StruveL, Subfactorial, Subtract, Surd, ThreeJSymbol, TriangleWave, UnitBox, UnitStep, UnitTriangle, WeberE, WeierstrassE1, WeierstrassE2, WeierstrassE3, WeierstrassEta1, WeierstrassEta2, WeierstrassEta3, WeierstrassHalfPeriods, WeierstrassHalfPeriodW1, WeierstrassHalfPeriodW2, WeierstrassHalfPeriodW3, WeierstrassInvariantG2, WeierstrassInvariantG3, WeierstrassInvariants, WeierstrassP, WeierstrassPPrime, WeierstrassSigma, WeierstrassZeta, WhittakerM, WhittakerW, WignerD, WilksW, ZernikeR, Zeta, ZetaZero, $MaxPiecewiseCases

Basic (243)


Abs, All, AllowedDimensions, And, Append, Apply, ArcCos, ArcCosh, ArcCot, ArcCoth, ArcCsc, ArcCsch, ArcSec, ArcSech, ArcSin, ArcSinh, ArcTan, ArcTanh, Arg, Array, ArrayDepth, ArrayQ, AtomQ, Attributes, Automatic, Binomial, Blank, BlankNullSequence, BlankSequence, Block, Cancel, Cases, Ceiling, CharacterRange, Characters, Check, Clear, ClearAll, ClearAttributes, Coefficient, Collect, Column, Complement, Complex, Composition, CompoundExpression, Condition, Conjugate, Contexts, Cos, Cosh, Cot, Coth, Cross, Csc, Csch, DateList, Default, Definition, Degree, DeleteCases, Denominator, Depth, Det, Dimensions, DiracDelta, Disk, Divide, Divisors, Do, Dot, E, Equal, Evaluate, EvenQ, Exp, Expand, Extract, Factor, False, FindFit, First, FirstCase, FirstPosition, Fit, Flatten, Floor, Fold, FoldList, For, Format, Fourier, FreeQ, Function, Gather, GatherBy, GCD, General, Graphics, Greater, GreaterEqual, Grid, Head, Hold, HoldAll, HoldFirst, HoldPattern, HoldRest, I, Identity, IdentityMatrix, If, Im, Infinity, Inner, InputForm, Integer, IntegerQ, Intersection, Interval, Inverse, Join, Last, LCM, Length, Less, LessEqual, Level, Line, List, Listable, ListQ, Log, Map, MapAt, MapThread, MatchQ, MatrixQ, Max, Mean, Median, MemberQ, Message, Min, Mod, Module, Most, N, Nest, None, Nor, Norm, Normal, Not, Null, NumberQ, Numerator, NumericQ, OddQ, Options, Or, OrderedQ, Out, Outer, Part, Partition, Pattern, Permutations, Pi, Piecewise, Plot, Plus, Point, Polygon, Power, PowerRange, Prepend, Prime, PrimeQ, Print, RandomInteger, RandomReal, Range, Rational, Re, Real, Replace, ReplaceAll, ReplacePart, Rest, Return, Reverse, RightComposition, Round, Rule, RuleDelayed, SameQ, Sec, Sech, Select, Sequence, Set, SetAttributes, SetDelayed, SetOptions, Sign, Sin, Sinh, Slot, SlotSequence, Sort, SortBy, Span, SparseArray, Subsets, Switch, Table, TagSet, TagSetDelayed, TagUnset, Take, Tally, Tan, Tanh, Thread, Times, Timing, Together, Tr, True, Tuples, Union, UnsameQ, Unset, UpSet, UpSetDelayed, VectorQ, Verbatim, Which, While, With, $ModuleNumber, $NewSymbol

Image (183)


AlphaChannel, BarcodeImage, BarcodeRecognize, Binarize, BinaryImageQ, Blur, BorderDimensions, BottomHatTransform, BrightnessEqualize, CaptureRunning, ChanVeseBinarize, Closing, ComponentMeasurements, ConformImages, ConstantImage, ContourDetect, CornerNeighbors, CrossingDetect, CurrentImage, CurrentNotebookImage, CurrentScreenImage, DeleteBorderComponents, DeleteSmallComponents, Dilation, DistanceTransform, DominantColors, DynamicImage, EdgeDetect, Erosion, EstimatedBackground, FillingTransform, FilterRules, FindFaces, FindThreshold, FrameRate, GeodesicClosing, GeodesicDilation, GeodesicErosion, GeodesicOpening, GrowCutComponents, GuidedFilter, HighlightImage, HitMissTransform, Image, Image3D, Image3DProjection, Image3DSlices, ImageAccumulate, ImageAdd, ImageAdjust, ImageAlign, ImageApply, ImageApplyIndexed, ImageAspectRatio, ImageAssemble, ImageCapture, ImageCaptureFunction, ImageChannels, ImageClip, ImageCollage, ImageCompose, ImageConvolve, ImageCooccurrence, ImageCorners, ImageCorrelate, ImageCorrespondingPoints, ImageCrop, ImageData, ImageDeconvolve, ImageDemosaic, ImageDifference, ImageDimensions, ImageDisplacements, ImageDistance, ImageEffect, ImageExposureCombine, ImageFeatureTrack, ImageFileApply, ImageFileFilter, ImageFileScan, ImageFocusCombine, ImageForestingComponents, ImageFormattingWidth, ImageForwardTransformation, ImageGraphics, ImageKeypoints, ImageLevels, ImageLines, ImageMargins, ImageMarker, ImageMeasurements, ImageMultiply, ImagePad, ImagePadding, ImagePartition, ImagePeriodogram, ImagePerspectiveTransformation, ImagePosition, ImagePreviewFunction, ImagePyramid, ImagePyramidApply, ImageQ, ImageRecolor, ImageReflect, ImageResize, ImageResolution, ImageRestyle, ImageRotate, ImageScaled, ImageScan, ImageSize, ImageSizeAction, ImageSizeMultipliers, ImageSubtract, ImageTake, ImageTransformation, ImageTrim, ImageType, ImageValue, ImageValuePositions, IncludeMetaInformation, Inpaint, Interleaving, InverseDistanceTransform, InverseImagePyramid, InverseRadon, KeypointStrength, LiftingFilterData, LinearGradientImage, LocalAdaptiveBinarize, Masking, MaxDetect, MaxFeatureDisplacement, MaxFeatures, MaxItems, MetaInformation, MinDetect, MorphologicalBinarize, MorphologicalBranchPoints, MorphologicalComponents, MorphologicalEulerNumber, MorphologicalGraph, MorphologicalPerimeter, MorphologicalTransform, Opening, Padding, PixelValue, PixelValuePositions, PreprocessingRules, PreserveColor, PreserveImageOptions, Pruning, RadialGradientImage, Radon, RandomImage, RegionBinarize, RegionImage, ReliefImage, RemoveAlphaChannel, RemoveBackground, ReplaceImageValue, ReplacePixelValue, Resampling, SelectComponents, SetAlphaChannel, Sharpen, SkeletonTransform, TextRecognize, Thinning, Threshold, Thumbnail, TopHatTransform, TransformationClass, WatershedComponents, WaveletFilterCoefficients, WaveletImagePlot, WordCloud, WordOrientation, WordSelectionFunction, WordSpacings, ZoomCenter, ZoomFactor, $ImageFormattingWidth

Graph Theory (179)


AdjacencyGraph, AdjacencyList, AdjacencyMatrix, BetweennessCentrality, BreadthFirstScan, CanonicalGraph, ChromaticPolynomial, ClosenessCentrality, CommunityGraphPlot, CommunityLabels, CommunityRegionStyle, ConnectedComponents, ConnectedGraphComponents, DegreeCentrality, DepthFirstScan, DirectedEdge, DirectedEdges, DirectedGraph, EccentricityCentrality, EdgeAdd, EdgeBetweennessCentrality, EdgeCapacity, EdgeConnectivity, EdgeContract, EdgeCost, EdgeCount, EdgeCycleMatrix, EdgeDelete, EdgeIndex, EdgeLabels, EdgeLabelStyle, EdgeList, EdgeRules, EdgeShapeFunction, EdgeStyle, EdgeWeight, EdgeWeightedGraphQ, EigenvectorCentrality, FindClique, FindCycle, FindEdgeCover, FindEdgeCut, FindEdgeIndependentPaths, FindEulerianCycle, FindFundamentalCycles, FindGraphCommunities, FindGraphIsomorphism, FindGraphPartition, FindHamiltonianCycle, FindHamiltonianPath, FindIndependentEdgeSet, FindIndependentVertexSet, FindKClan, FindKClique, FindKClub, FindKPlex, FindMaximumFlow, FindMinimumCostFlow, FindMinimumCut, FindPath, FindPostmanTour, FindShortestPath, FindSpanningTree, FindVertexCover, FindVertexCut, FindVertexIndependentPaths, FlowPolynomial, GlobalClusteringCoefficient, Graph, Graph3D, GraphAssortativity, GraphAutomorphismGroup, GraphCenter, GraphComplement, GraphData, GraphDensity, GraphDiameter, GraphDifference, GraphDisjointUnion, GraphDistance, GraphDistanceMatrix, GraphEmbedding, GraphHighlight, GraphHighlightStyle, GraphHub, GraphIntersection, GraphLayout, GraphLinkEfficiency, GraphPeriphery, GraphPlot, GraphPlot3D, GraphPower, GraphRadius, GraphReciprocity, GraphStyle, GraphUnion, HighlightGraph, HITSCentrality, IncidenceGraph, IncidenceList, IncidenceMatrix, IndexGraph, KatzCentrality, KCoreComponents, KEdgeConnectedComponents, KirchhoffMatrix, KVertexConnectedComponents, LambdaComponents, LayeredGraphPlot, LayerSizeFunction, LinkRankCentrality, LocalClusteringCoefficient, LuccioSamiComponents, MeanClusteringCoefficient, MeanDegreeConnectivity, MeanGraphDistance, MeanNeighborDegree, MultiedgeStyle, NeighborhoodGraph, NestGraph, OptimumFlowData, PageRankCentrality, PlanarGraph, Properties, Property, PropertyList, PropertyValue, RadialityCentrality, RandomGraph, RelationGraph, RemoveProperty, ReverseGraph, SelfLoopStyle, SetProperty, ShortestPathFunction, SimpleGraph, SocialMediaData, StatusCentrality, Subgraph, TopologicalSort, TransitiveClosureGraph, TransitiveReductionGraph, TreePlot, TuttePolynomial, UndirectedEdge, UndirectedGraph, VertexAdd, VertexCapacity, VertexComponent, VertexConnectivity, VertexContract, VertexCoordinates, VertexCorrelationSimilarity, VertexCosineSimilarity, VertexCount, VertexDegree, VertexDelete, VertexDiceSimilarity, VertexEccentricity, VertexInComponent, VertexInDegree, VertexIndex, VertexJaccardSimilarity, VertexLabels, VertexLabelStyle, VertexList, VertexOutComponent, VertexOutDegree, VertexReplace, VertexShape, VertexShapeFunction, VertexSize, VertexStyle, VertexWeight, VertexWeightedGraphQ, WeaklyConnectedComponents, WeaklyConnectedGraphComponents, WeightedAdjacencyGraph, WeightedAdjacencyMatrix

Statistical Distribution (152)


ArcSinDistribution, BatesDistribution, BeckmannDistribution, BenfordDistribution, BeniniDistribution, BenktanderGibratDistribution, BenktanderWeibullDistribution, BernoulliDistribution, BetaBinomialDistribution, BetaDistribution, BetaNegativeBinomialDistribution, BetaPrimeDistribution, BinomialDistribution, BinormalDistribution, BirnbaumSaundersDistribution, BorelTannerDistribution, CauchyDistribution, CensoredDistribution, ChiDistribution, ChiSquareDistribution, CircularOrthogonalMatrixDistribution, CircularQuaternionMatrixDistribution, CircularRealMatrixDistribution, CircularSymplecticMatrixDistribution, CircularUnitaryMatrixDistribution, CompoundPoissonDistribution, CopulaDistribution, CoxianDistribution, DagumDistribution, DataDistribution, DavisDistribution, DirichletDistribution, DiscreteUniformDistribution, EmpiricalDistribution, ErlangDistribution, EstimatedDistribution, ExpGammaDistribution, ExponentialDistribution, ExponentialPowerDistribution, ExtremeValueDistribution, FailureDistribution, FirstPassageTimeDistribution, FisherHypergeometricDistribution, FisherZDistribution, FRatioDistribution, FrechetDistribution, GammaDistribution, GaussianOrthogonalMatrixDistribution, GaussianSymplecticMatrixDistribution, GaussianUnitaryMatrixDistribution, GeometricDistribution, GompertzMakehamDistribution, GumbelDistribution, HalfNormalDistribution, HjorthDistribution, HotellingTSquareDistribution, HoytDistribution, HyperbolicDistribution, HyperexponentialDistribution, HypergeometricDistribution, HypoexponentialDistribution, InverseChiSquareDistribution, InverseGammaDistribution, InverseGaussianDistribution, InverseWishartMatrixDistribution, JohnsonDistribution, KDistribution, KernelMixtureDistribution, KumaraswamyDistribution, LandauDistribution, LaplaceDistribution, LevyDistribution, LindleyDistribution, LogGammaDistribution, LogisticDistribution, LogLogisticDistribution, LogMultinormalDistribution, LogNormalDistribution, LogSeriesDistribution, MarchenkoPasturDistribution, MarginalDistribution, MatrixNormalDistribution, MatrixPropertyDistribution, MatrixTDistribution, MaxStableDistribution, MaxwellDistribution, MeixnerDistribution, MinStableDistribution, MixtureDistribution, MoyalDistribution, MultinomialDistribution, MultinormalDistribution, MultivariateHypergeometricDistribution, MultivariatePoissonDistribution, MultivariateTDistribution, NakagamiDistribution, NegativeBinomialDistribution, NegativeMultinomialDistribution, NoncentralBetaDistribution, NoncentralChiSquareDistribution, NoncentralFRatioDistribution, NoncentralStudentTDistribution, NormalDistribution, OrderDistribution, ParameterMixtureDistribution, ParetoDistribution, ParetoPickandsDistribution, PascalDistribution, PearsonDistribution, PERTDistribution, PoissonConsulDistribution, PoissonDistribution, PolyaAeppliDistribution, PowerDistribution, ProbabilityDistribution, ProductDistribution, RayleighDistribution, ReliabilityDistribution, RiceDistribution, SechDistribution, ShiftedGompertzDistribution, SinghMaddalaDistribution, SkellamDistribution, SkewNormalDistribution, SliceDistribution, SmoothKernelDistribution, SplicedDistribution, StableDistribution, StandbyDistribution, StationaryDistribution, StudentTDistribution, SurvivalDistribution, SuzukiDistribution, TracyWidomDistribution, TransformedDistribution, TriangularDistribution, TruncatedDistribution, TsallisQExponentialDistribution, TsallisQGaussianDistribution, TukeyLambdaDistribution, UniformDistribution, UniformSumDistribution, VarianceGammaDistribution, VoigtDistribution, VonMisesDistribution, WakebyDistribution, WalleniusHypergeometricDistribution, WaringYuleDistribution, WeibullDistribution, WignerSemicircleDistribution, WishartMatrixDistribution, ZipfDistribution

Graphics (126)


AbsoluteDashing, AbsolutePointSize, AbsoluteThickness, Antialiasing, Arrowheads, AspectRatio, Axes, AxesEdge, AxesLabel, AxesOrigin, AxesStyle, Axis, Back, Background, BezierFunction, Boxed, BoxRatios, BoxStyle, BSplineFunction, BSplineSurface, ClippingStyle, ClipPlanes, ClipPlanesStyle, ClipRange, ContentSelectable, ContourLabels, Contours, ContourShading, CoordinatesToolOptions, CurveClosed, Dashed, Dashing, DataRange, DataReversed, DateTicksFormat, DefaultAxesStyle, DefaultBaseStyle, DefaultBoxStyle, DefaultFaceGridsStyle, DefaultFrameStyle, DefaultFrameTicksStyle, Directive, DisplayFunction, DotDashed, Dotted, Epilog, Exclusions, ExtentElementFunction, ExtentMarkers, ExtentSize, FaceGrids, Filling, FillingStyle, Frame, FrameLabel, FrameMargins, FrameTicks, Front, FullGraphics, Graphics3D, GraphicsColumn, GraphicsGrid, GraphicsGroup, GraphicsRow, GridLines, Highlighted, Inset, ItemAspectRatio, Joined, Lighting, LightingAngle, Mesh, MeshFunctions, MeshShading, NCache, NormalsFunction, Offset, Opacity, OpacityFunction, OpacityFunctionScaling, PixelConstrained, PointSize, PolarAxes, PolarAxesOrigin, PolarGridLines, PolarTicks, Prolog, Raster, Raster3D, Rasterize, RasterSize, RegionFunction, RevolutionAxis, Rotate, RotateLabel, RotationAction, RoundingRadius, Scale, Scaled, Show, Specularity, SphericalRegion, SplineClosed, SplineDegree, SplineKnots, SplineWeights, StreamScale, Texture, Thick, Thickness, Thin, Ticks, Translate, Transparent, VertexColors, VertexDataCoordinates, VertexNormals, VertexTextureCoordinates, ViewAngle, ViewCenter, ViewMatrix, ViewPoint, ViewProjection, ViewRange, ViewVector, ViewVertical

Region (125)


Area, ArrayMesh, AugmentedPolyhedron, BeveledPolyhedron, BooleanRegion, BoundaryDiscretizeGraphics, BoundaryDiscretizeRegion, BoundaryMesh, BoundaryMeshRegion, BoundaryMeshRegionQ, BoundedRegionQ, BoundingRegion, CanonicalizePolygon, CanonicalizePolyhedron, CantorMesh, ConnectedMeshComponents, ConstantRegionQ, ConvexHullMesh, ConvexPolygonQ, ConvexPolyhedronQ, CrossingCount, CrossingPolygon, DelaunayMesh, DihedralAngle, DimensionalMeshComponents, DirichletCondition, DiscretizeGraphics, DiscretizeRegion, DualPolyhedron, EulerCharacteristic, FindMeshDefects, GeometricScene, HighlightMesh, HilbertCurve, ImageMesh, ImplicitRegion, InnerPolygon, InnerPolyhedron, InverseTransformedRegion, KochCurve, MaxCellMeasure, MengerMesh, MeshCellCentroid, MeshCellCount, MeshCellHighlight, MeshCellIndex, MeshCellLabel, MeshCellMarker, MeshCellMeasure, MeshCellQuality, MeshCells, MeshCellShapeFunction, MeshCellStyle, MeshCoordinates, MeshPrimitives, MeshQualityGoal, MeshRefinementFunction, MeshRegion, MeshRegionQ, MomentOfInertia, NeumannValue, OuterPolygon, OuterPolyhedron, ParametricRegion, PeanoCurve, Perimeter, PeriodicBoundaryCondition, PlanarAngle, PolygonAngle, PolygonCoordinates, PolygonDecomposition, PolyhedronAngle, PolyhedronCoordinates, PolyhedronDecomposition, PolyhedronGenus, Printout3D, Printout3DPreviewer, Pyramid, RandomPoint, RandomPolygon, RandomPolyhedron, Region, RegionBoundary, RegionBounds, RegionCentroid, RegionDifference, RegionDimension, RegionDisjoint, RegionDistance, RegionDistanceFunction, RegionEmbeddingDimension, RegionEqual, RegionIntersection, RegionMeasure, RegionMember, RegionMemberFunction, RegionMoment, RegionNearest, RegionNearestFunction, RegionProduct, RegionQ, RegionResize, RegionSize, RegionSymmetricDifference, RegionUnion, RegionWithin, RepairMesh, SierpinskiCurve, SierpinskiMesh, SignedRegionDistance, SimplePolygonQ, SimplePolyhedronQ, SnubPolyhedron, SolidAngle, SolidRegionQ, SurfaceArea, TransformedRegion, TriangulateMesh, TruncatedPolyhedron, UniformPolyhedron, Volume, VoronoiMesh, WindingCount, WindingPolygon, $Printout3DPreviewer

String (115)


Alphabet, AlphabeticOrder, AlphabeticSort, Antonyms, Capitalize, CaseOrdering, CaseSensitive, CharacterCounts, CharacterEncoding, CharacterName, Containing, Decapitalize, DeleteStopwords, DictionaryWordQ, DigitCharacter, DigitQ, EndOfLine, EndOfString, ExportString, FromLetterNumber, HexadecimalCharacter, IgnoreCase, IgnorePunctuation, ImportString, IncludeInflections, InputString, InsertLinebreaks, LanguageIdentify, LetterCharacter, LetterCounts, LetterNumber, LetterQ, LowerCaseQ, NameQ, Names, NumberString, Overlaps, PalindromeQ, PartOfSpeech, Pluralize, PrintableASCIIQ, PunctuationCharacter, RandomWord, RegularExpression, RemoveDiacritics, Snippet, SpellingCorrection, SpellingCorrectionList, SpokenString, StartOfLine, StartOfString, String, StringCases, StringContainsQ, StringCount, StringDelete, StringDrop, StringEndsQ, StringExpression, StringExtract, StringFormat, StringFreeQ, StringInsert, StringJoin, StringLength, StringMatchQ, StringPadLeft, StringPadRight, StringPart, StringPartition, StringPosition, StringQ, StringRepeat, StringReplace, StringReplaceList, StringReplacePart, StringReverse, StringRiffle, StringRotateLeft, StringRotateRight, StringSkeleton, StringSplit, StringStartsQ, StringTake, StringTrim, Symbol, Synonyms, SyntaxLength, SyntaxQ, TextCases, TextContents, TextElement, TextPosition, TextSentences, TextStructure, TextTranslation, TextWords, ToCharacterCode, ToLowerCase, ToString, ToUpperCase, Transliterate, UpperCaseQ, VerifyInterpretation, Whitespace, WhitespaceCharacter, WordBoundary, WordCharacter, WordCount, WordCounts, WordDefinition, WordList, WordStem, WordTranslation, WriteString

Plotting (110)


AbsArgPlot, AnatomyPlot3D, AnatomySkinStyle, AnatomyStyling, BoundaryStyle, Callout, CalloutMarker, CalloutStyle, ComplexListPlot, ComplexPlot, ComplexPlot3D, ContourPlot, ContourPlot3D, DateListLogPlot, DateListPlot, DateListStepPlot, DensityPlot, DensityPlot3D, DiscretePlot, DiscretePlot3D, IntervalMarkers, IntervalMarkersStyle, JuliaSetPlot, LabelingSize, LabelVisibility, LeaderSize, LineIntegralConvolutionPlot, LineIntegralConvolutionScale, ListContourPlot, ListContourPlot3D, ListCurvePathPlot, ListDensityPlot, ListDensityPlot3D, ListLineIntegralConvolutionPlot, ListLinePlot, ListLogLinearPlot, ListLogLogPlot, ListLogPlot, ListPlot, ListPlot3D, ListPointPlot3D, ListPolarPlot, ListSliceContourPlot3D, ListSliceDensityPlot3D, ListSliceVectorPlot3D, ListStepPlot, ListStreamDensityPlot, ListStreamPlot, ListSurfacePlot3D, ListVectorDensityPlot, ListVectorPlot, ListVectorPlot3D, LogLinearPlot, LogLogPlot, LogPlot, MandelbrotSetPlot, MaxPlotPoints, NumberLinePlot, ParametricPlot, ParametricPlot3D, Plot3D, PlotLabel, PlotLabels, PlotLayout, PlotLegends, PlotMarkers, PlotPoints, PlotRange, PlotRangeClipping, PlotRangePadding, PlotRegion, PlotStyle, PlotTheme, PolarPlot, ProbabilityPlot, ProbabilityScalePlot, QuantilePlot, ReferenceLineStyle, RegionPlot, RegionPlot3D, ReImLabels, ReImPlot, ReImStyle, ReliefPlot, RevolutionPlot3D, RulePlot, SingularValuePlot, SliceContourPlot3D, SliceDensityPlot3D, SliceVectorPlot3D, SphericalPlot3D, StackedDateListPlot, StackedListPlot, StreamDensityPlot, StreamMarkers, StreamPlot, StreamPoints, StreamPosition, TextureCoordinateFunction, TextureCoordinateScaling, TimelinePlot, VectorDensityPlot, VectorMarkers, VectorPlot, VectorPlot3D, VectorPoints, VectorScale, WaveletListPlot, WaveletMatrixPlot, $PlotTheme

Statistics (110)


AbsoluteCorrelation, AbsoluteCorrelationFunction, AlternativeHypothesis, BarlowProschanImportance, BirnbaumImportance, BiweightLocation, BiweightMidvariance, CDF, Censoring, CentralFeature, CentralMoment, CentralMomentGeneratingFunction, CharacteristicFunction, Conditioned, ConfidenceRange, ConfidenceTransform, ContraharmonicMean, Correlation, CorrelationFunction, Covariance, CovarianceFunction, CoxModel, CoxModelFit, CriticalityFailureImportance, CriticalitySuccessImportance, Cumulant, CumulantGeneratingFunction, Distributed, DistributionParameterAssumptions, DistributionParameterQ, ErlangB, ErlangC, EventData, Expectation, ExponentialMovingAverage, FactorialMoment, FactorialMomentGeneratingFunction, FindDistribution, FindDistributionParameters, FussellVeselyImportance, GeometricMean, HarmonicMean, HazardFunction, HoeffdingD, HypothesisTestData, ImprovementImportance, InitialSeeding, InterquartileRange, InverseCDF, InverseSurvivalFunction, Kurtosis, Likelihood, LogLikelihood, MaxExtraBandwidths, MaxMixtureKernels, MeanDeviation, MedianDeviation, MissingDataMethod, Moment, MomentConvert, MomentEvaluate, MomentGeneratingFunction, MovingAverage, MovingMedian, NExpectation, NProbability, ParameterEstimator, PartialCorrelationFunction, PDF, PillaiTrace, PowerSpectralDensity, Probability, QnDispersion, Quantile, QuartileDeviation, Quartiles, QuartileSkewness, QueueProperties, RandomChoice, RandomComplex, RandomFunction, RandomSample, RandomSeeding, RandomVariate, RarerProbability, RiskAchievementImportance, RiskReductionImportance, RootMeanSquare, SeedRandom, SignificanceLevel, Skewness, SnDispersion, SpatialMedian, StandardDeviation, Standardize, Standardized, StrataVariables, StructuralImportance, SurvivalFunction, SurvivalModel, SurvivalModelFit, TemporalData, TrimmedMean, TrimmedVariance, Variance, VerifyTestAssumptions, WeakStationarity, WeightedData, WinsorizedMean, WinsorizedVariance

Paclet (103)


AdministrativeDivisionData, AircraftData, AirportData, AirPressureData, AirTemperatureData, AnatomyData, BridgeData, BroadcastStationData, BuildingData, ChemicalData, CityData, CometData, CompanyData, ConstellationData, CountryData, DamData, DeepSpaceProbeData, DictionaryLookup, EarthImpactData, EarthquakeData, ElementData, ExampleData, ExoplanetData, FetalGrowthData, FinancialData, FormulaData, FormulaLookup, GalaxyData, GenomeData, GenomeLookup, GeoElevationData, GeogravityModelData, GeologicalPeriodData, GeomagneticModelData, HistoricalPeriodData, HumanGrowthData, IconData, IslandData, IsotopeData, KnotData, LakeData, LaminaData, LanguageData, LatticeData, MannedSpaceMissionData, MathematicalFunctionData, MedicalTestData, MeteorShowerData, MineralData, MinorPlanetData, MortalityData, MountainData, MovieData, NebulaData, NeighborhoodData, NuclearExplosionData, NuclearReactorData, OceanData, ParkData, ParticleAcceleratorData, ParticleData, PersonData, PhysicalSystemData, PlaneCurveData, PlanetaryMoonData, PlanetData, PlantData, PolyhedronData, ProteinData, PsychrometricPropertyData, PulsarData, SatelliteData, SolarSystemFeatureData, SolidData, SpaceCurveData, SpeciesData, SpectralLineData, StandardAtmosphereData, StandardOceanData, StarClusterData, StarData, StoppingPowerData, SupernovaData, SurfaceData, ThermodynamicData, TideData, TropicalStormData, TunnelData, UnderseaFeatureData, UniverseModelData, UniversityData, VolcanoData, WeatherData, WeatherForecastData, WikipediaData, WindDirectionData, WindSpeedData, WindVectorData, WolframLanguageData, WordData, WordFrequency, WordFrequencyData, ZIPCodeData

Cloud (97)


AddUsers, AllowedCloudExtraParameters, AllowedCloudParameterExtensions, APIFunction, Authentication, AutoRefreshed, AutoSubmitting, CachePersistence, ClearPermissions, CloudAccountData, CloudBase, CloudConnect, CloudDeploy, CloudDirectory, CloudDisconnect, CloudEvaluate, CloudExport, CloudExpression, CloudExpressions, CloudFunction, CloudGet, CloudImport, CloudLoggingData, CloudObject, CloudObjectNameFormat, CloudObjects, CloudObjectURLType, CloudPublish, CloudPut, CloudSave, CloudShare, CloudSubmit, CloudSymbol, CloudUnshare, CompoundElement, CreateCloudExpression, CreatePermissionsGroup, CreateUUID, Delayed, DeleteCloudExpression, DeleteObject, DeletePermissionsKey, EmbeddedHTML, ExportForm, ExternalBundle, ExternalTypeSignature, FormControl, FormFunction, FormLayoutFunction, FormObject, FormPage, GenerateHTTPResponse, GenerateSecuredAuthenticationKey, HTTPErrorResponse, HTTPResponse, IconRules, IncludeDefinitions, LocalCache, PageTheme, PartProtection, Permissions, PermissionsGroup, PermissionsGroups, PermissionsKey, PermissionsKeys, RemoveUsers, ResponseForm, SecuredAuthenticationKey, SecuredAuthenticationKeys, SetCloudDirectory, SetPermissions, SetUsers, SharingList, $CacheBaseDirectory, $CloudBase, $CloudConnected, $CloudCreditsAvailable, $CloudEvaluation, $CloudExpressionBase, $CloudObjectNameFormat, $CloudObjectURLType, $CloudRootDirectory, $CloudSymbolBase, $CloudUserID, $CloudUserUUID, $CloudVersion, $EvaluationCloudBase, $EvaluationCloudObject, $Permissions, $RequesterAddress, $RequesterWolframID, $RequesterWolframUUID, $SSHAuthentication, $UserAgentString, $UserURLBase, $WolframID, $WolframUUID

Net (90)


AggregationLayer, AppendLayer, AttentionLayer, BasicRecurrentLayer, BatchNormalizationLayer, BatchSize, CatenateLayer, ConstantArrayLayer, ConstantPlusLayer, ConstantTimesLayer, ContrastiveLossLayer, ConvolutionLayer, CrossEntropyLossLayer, CTCLossLayer, DeconvolutionLayer, DotLayer, DropoutLayer, ElementwiseLayer, EmbeddingLayer, ExtractLayer, FlattenLayer, GatedRecurrentLayer, LearningRate, LearningRateMultipliers, LinearLayer, LocalResponseNormalizationLayer, LongShortTermMemoryLayer, LossFunction, MaxTrainingRounds, MeanAbsoluteLossLayer, MeanSquaredLossLayer, NetAppend, NetBidirectionalOperator, NetChain, NetDecoder, NetDelete, NetDrop, NetEncoder, NetEvaluationMode, NetExtract, NetFlatten, NetFoldOperator, NetGraph, NetInformation, NetInitialize, NetInsert, NetInsertSharedArrays, NetJoin, NetMapOperator, NetMapThreadOperator, NetMeasurements, NetModel, NetNestOperator, NetPairEmbeddingOperator, NetPort, NetPortGradient, NetPrepend, NetRename, NetReplace, NetReplacePart, NetSharedArray, NetStateObject, NetTake, NetTrain, NetTrainResultsObject, NormalizationLayer, OrderingLayer, PaddingLayer, PartLayer, PoolingLayer, PrependLayer, ReplicateLayer, ReshapeLayer, ResizeLayer, SequenceLastLayer, SequenceMostLayer, SequenceRestLayer, SequenceReverseLayer, SoftmaxLayer, SpatialTransformationLayer, SummationLayer, ThreadingLayer, TotalLayer, TrainingProgressCheckpointing, TrainingProgressFunction, TrainingProgressMeasurements, TrainingProgressReporting, TrainingStoppingCriterion, TransposeLayer, UnitVectorLayer

Control System (88)


AffineStateSpaceModel, AsymptoticOutputTracker, BodePlot, CarlemanLinearize, ContinuousTimeModelQ, ControllabilityGramian, ControllabilityMatrix, ControllableDecomposition, ControllableModelQ, DescriptorStateSpace, DiscreteLQEstimatorGains, DiscreteLQRegulatorGains, DiscreteTimeModelQ, DualSystemsModel, EstimatorGains, EstimatorRegulator, FeedbackLinearize, FeedbackSector, FeedbackSectorStyle, FeedbackType, FullInformationOutputRegulator, GainMargins, GainPhaseMargins, InternallyBalancedDecomposition, JordanModelDecomposition, KalmanEstimator, KroneckerModelDecomposition, LinearizingTransformationData, LQEstimatorGains, LQGRegulator, LQOutputRegulatorGains, LQRegulatorGains, MinimalStateSpaceModel, NicholsGridLines, NicholsPlot, NonlinearStateSpaceModel, NyquistGridLines, NyquistPlot, ObservabilityGramian, ObservabilityMatrix, ObservableDecomposition, ObservableModelQ, OutputControllabilityMatrix, OutputControllableModelQ, OutputResponse, PhaseMargins, PhaseRange, PIDData, PIDDerivativeFilter, PIDFeedforward, PIDTune, PoleZeroMarkers, RootLocusPlot, SamplingPeriod, SmithDelayCompensator, StabilityMargins, StabilityMarginsStyle, StateFeedbackGains, StateOutputEstimator, StateResponse, StateSpaceModel, StateSpaceRealization, StateSpaceTransform, StateTransformationLinearize, SystemsConnectionsModel, SystemsModelDelay, SystemsModelDelayApproximate, SystemsModelDelete, SystemsModelDimensions, SystemsModelExtract, SystemsModelFeedbackConnect, SystemsModelLabels, SystemsModelLinearity, SystemsModelMerge, SystemsModelOrder, SystemsModelParallelConnect, SystemsModelSeriesConnect, SystemsModelStateFeedbackConnect, SystemsModelVectorRelativeOrders, ToContinuousTimeModel, ToDiscreteTimeModel, TransferFunctionCancel, TransferFunctionExpand, TransferFunctionFactor, TransferFunctionModel, TransferFunctionPoles, TransferFunctionTransform, TransferFunctionZeros

Operator (86)


AngleBracket, Backslash, Because, BracketingBar, Cap, CapitalDifferentialD, CenterDot, CircleDot, CircleMinus, CirclePlus, CircleTimes, Colon, Congruent, Coproduct, Cup, CupCap, Del, Diamond, DifferentialD, DoubleBracketingBar, DoubleVerticalBar, Equilibrium, MinusPlus, NonCommutativeMultiply, NotCongruent, NotCupCap, NotDoubleVerticalBar, NotExists, NotReverseElement, NotSquareSubset, NotSquareSubsetEqual, NotSquareSuperset, NotSquareSupersetEqual, NotSubset, NotSubsetEqual, NotSuperset, NotSupersetEqual, NotVerticalBar, OverBar, OverDot, OverHat, Overscript, OverTilde, OverVector, PlusMinus, Proportion, Proportional, ReverseElement, ReverseEquilibrium, ReverseUpEquilibrium, SmallCircle, SpanFromLeft, Square, SquareIntersection, SquareSubset, SquareSubsetEqual, SquareSuperset, SquareSupersetEqual, SquareUnion, Star, SubMinus, SubPlus, Subscript, Subset, SubsetEqual, SubStar, Subsuperscript, SuchThat, SuperDagger, SuperMinus, SuperPlus, Superscript, Superset, SupersetEqual, SuperStar, Therefore, UnderBar, Underoverscript, Underscript, UnionPlus, UpEquilibrium, Vee, VerticalBar, VerticalSeparator, VerticalTilde, Wedge

Front End (85)


Iconize, Infix, Inherited, InheritScope, Initialization, Input, InputAutoReplacements, Interpretation, Invisible, Item, ItemSize, LimitsPositioning, LineIndent, LineIndentMaxFraction, LineSpacing, ListAnimate, LocalizeVariables, LocatorAutoCreate, LocatorRegion, Magnify, MakeExpression, Manual, Overlay, Paneled, PaneSelector, PassEventsDown, PassEventsUp, Placeholder, PopupWindow, Postfix, PreemptProtect, Prefix, Refresh, RefreshRate, Row, SaveDefinitions, Scrollbars, ScrollPosition, ShrinkingDelay, Spacer, Spacings, SpanFromAbove, SpanFromBoth, SynchronousInitialization, SynchronousUpdating, Text, TextAlignment, TextClipboardType, TextData, TextJustification, ToExpression, TouchPosition, TouchscreenAutoZoom, TouchscreenControlPlacement, TrackedSymbols, TransitionDirection, TransitionDuration, TransitionEffect, UndoOptions, UndoTrackedVariables, UnsavedVariables, UpdateInterval, UsingFrontEnd, $CharacterEncoding, $CharacterEncodings, $ControlActiveSetting, $DefaultImagingDevice, $Display, $DisplayFunction, $Epilog, $FrontEnd, $FrontEndSession, $IgnoreEOF, $ImagingDevices, $ImportFormats, $Inspector, $Line, $NumberMarks, $OutputSizeLimit, $ScriptCommandLine, $ScriptInputString, $SummaryBoxDataSizeLimit, $SynchronousEvaluation, $SyntaxHandler, $Urgent

Cell (78)


AllowGroupClose, AllowInlineCells, AllowReverseGroupClose, Cell, CellAutoOverwrite, CellBaseline, CellBracketOptions, CellChangeTimes, CellContext, CellDingbat, CellDynamicExpression, CellEditDuplicate, CellEpilog, CellEvaluationDuplicate, CellEvaluationFunction, CellEventActions, CellFrame, CellFrameColor, CellFrameLabelMargins, CellFrameLabels, CellFrameMargins, CellGroup, CellGroupData, CellGrouping, CellID, CellLabel, CellLabelAutoDelete, CellLabelStyle, CellMargins, CellObject, CellOpen, CellPrint, CellProlog, Cells, CellStyle, CellTags, CloudRenderingMethod, ConversionRules, Copyable, DefaultDuplicateCellStyle, DefaultNaturalLanguage, DefaultNewCellStyle, Deletable, DockedCells, Editable, Evaluatable, EvaluationCell, ExpressionCell, GeneratedCell, Hyphenation, InitializationCell, LanguageCategory, Multiselection, NextCell, ParagraphIndent, ParagraphSpacing, ParentCell, PreviousCell, PrivateCellOptions, PrivateFontOptions, Selectable, SelectedCells, SelectionCreateCell, SelectionEvaluateCreateCell, ShowAutoSpellCheck, ShowAutoStyles, ShowCellBracket, ShowCellLabel, ShowCellTags, ShowCursorTracker, ShowGroupOpener, ShowSpecialCharacters, ShowStringCharacters, SingleLetterItalics, StripOnInput, StructuredSelection, TaggingRules, TextCell

File System (78)


AbsoluteFileName, Compress, ContextToFileName, CopyFile, CopyToClipboard, CreateArchive, CreateFile, DeleteContents, DeleteFile, DumpSave, Encode, ExpandFileName, Export, ExtractArchive, File, FileBaseName, FileByteCount, FileConvert, FileDate, FileExistsQ, FileExtension, FileFormat, FileHash, FileNameDepth, FileNameDrop, FileNameForms, FileNameJoin, FileNames, FileNameSetter, FileNameSplit, FileNameTake, FilePrint, FileSize, FileSystemMap, FileSystemScan, FileType, FindFile, Get, Import, IncludeDirectories, MailAddressValidation, MailExecute, MailFolder, MailItem, MailReceiverFunction, MailResponseFunction, MailSearch, MailServerConnect, MailServerConnection, MailSettings, NotebookDirectory, NotebookFileName, OpenAppend, OpenRead, OpenWrite, OverwriteTarget, Path, PingTime, Put, PutAppend, RemoteFile, RenameFile, ReturnReceiptFunction, Run, RunThrough, Save, SendMail, SendMessage, SetFileDate, SystemOpen, Uncompress, XMLElement, XMLObject, $ExportFormats, $IncomingMailSettings, $InputFileName, $MobilePhone, $Path

Comparison Operator (73)


DotEqual, EqualTilde, GreaterEqualLess, GreaterFullEqual, GreaterGreater, GreaterLess, GreaterSlantEqual, GreaterTilde, HumpDownHump, HumpEqual, LeftTriangle, LeftTriangleBar, LeftTriangleEqual, LessEqualGreater, LessFullEqual, LessGreater, LessLess, LessSlantEqual, LessTilde, NestedGreaterGreater, NestedLessLess, NotEqualTilde, NotGreater, NotGreaterEqual, NotGreaterFullEqual, NotGreaterGreater, NotGreaterLess, NotGreaterSlantEqual, NotGreaterTilde, NotHumpDownHump, NotHumpEqual, NotLeftTriangle, NotLeftTriangleBar, NotLeftTriangleEqual, NotLess, NotLessEqual, NotLessFullEqual, NotLessGreater, NotLessLess, NotLessSlantEqual, NotLessTilde, NotNestedGreaterGreater, NotNestedLessLess, NotPrecedes, NotPrecedesEqual, NotPrecedesSlantEqual, NotPrecedesTilde, NotRightTriangle, NotRightTriangleBar, NotRightTriangleEqual, NotSucceeds, NotSucceedsEqual, NotSucceedsSlantEqual, NotSucceedsTilde, NotTilde, NotTildeEqual, NotTildeFullEqual, NotTildeTilde, Precedes, PrecedesEqual, PrecedesSlantEqual, PrecedesTilde, RightTriangle, RightTriangleBar, RightTriangleEqual, Succeeds, SucceedsEqual, SucceedsSlantEqual, SucceedsTilde, Tilde, TildeEqual, TildeFullEqual, TildeTilde

Color (71)


Black, Blend, Blue, Brown, ChromaticityPlot, ChromaticityPlot3D, CMYKColor, ColorBalance, ColorCombine, ColorConvert, ColorCoverage, ColorData, ColorDataFunction, ColorDetect, ColorDistance, ColorFunction, ColorFunctionScaling, Colorize, ColorNegate, ColorProfileData, ColorQ, ColorQuantize, ColorReplace, ColorRules, ColorSeparate, ColorSetter, ColorsNear, ColorSpace, ColorToneMapping, Cyan, Darker, Dithering, FindMatchingColor, Glow, Gray, GrayLevel, Green, Hue, ImageColorSpace, LABColor, LCHColor, LightBlue, LightBrown, LightCyan, Lighter, LightGray, LightGreen, LightMagenta, LightOrange, LightPink, LightPurple, LightRed, LightYellow, LUVColor, Magenta, MaxColorDistance, MinColorDistance, Orange, Pink, Purple, RandomColor, Red, RGBColor, StreamColorFunction, StreamColorFunctionScaling, VectorColorFunction, VectorColorFunctionScaling, White, WhitePoint, XYZColor, Yellow

Audio (69)


AllowedFrequencyRange, Audio, AudioAmplify, AudioAnnotate, AudioAnnotationLookup, AudioBlockMap, AudioCapture, AudioChannelAssignment, AudioChannelCombine, AudioChannelMix, AudioChannels, AudioChannelSeparate, AudioData, AudioDelay, AudioDelete, AudioDistance, AudioFade, AudioFrequencyShift, AudioGenerator, AudioInputDevice, AudioInsert, AudioIntervals, AudioJoin, AudioLabel, AudioLength, AudioLocalMeasurements, AudioLooping, AudioLoudness, AudioMeasurements, AudioNormalize, AudioOutputDevice, AudioOverlay, AudioPad, AudioPan, AudioPartition, AudioPause, AudioPitchShift, AudioPlay, AudioPlot, AudioQ, AudioRecord, AudioReplace, AudioResample, AudioReverb, AudioSampleRate, AudioSpectralMap, AudioSpectralTransformation, AudioSplit, AudioStop, AudioStream, AudioStreams, AudioTimeStretch, AudioTrim, AudioType, ConformAudio, Duration, MaxDuration, PaddingSize, PartitionGranularity, PitchRecognize, RemoveAudioStream, SpeechRecognize, SpeechSynthesize, VoiceStyleData, $AudioInputDevices, $AudioOutputDevices, $DefaultAudioInputDevice, $DefaultAudioOutputDevice, $VoiceStyles

Linear Algebra (62)


AllowedHeads, AntihermitianMatrixQ, AntisymmetricMatrixQ, CharacteristicPolynomial, CholeskyDecomposition, ConjugateTranspose, Diagonal, DiagonalizableMatrixQ, DiagonalMatrixQ, DiscreteLyapunovSolve, DiscreteRiccatiSolve, Distribute, Eigensystem, Eigenvalues, Eigenvectors, HermiteDecomposition, HermitianMatrixQ, HessenbergDecomposition, IndefiniteMatrixQ, JordanDecomposition, LinearSolve, LinearSolveFunction, LowerTriangularize, LowerTriangularMatrixQ, LUDecomposition, LyapunovSolve, MatrixExp, MatrixFunction, MatrixLog, MatrixPower, MatrixRank, Minors, NegativeDefiniteMatrixQ, NegativeSemidefiniteMatrixQ, Normalize, Normalized, NormalMatrixQ, NullSpace, Orthogonalize, OrthogonalMatrixQ, Permanent, PositiveDefiniteMatrixQ, PositiveSemidefiniteMatrixQ, PrincipalComponents, Projection, PseudoInverse, QRDecomposition, RealBlockDiagonalForm, RiccatiSolve, RowReduce, SchurDecomposition, SingularValueDecomposition, SingularValueList, SmithDecomposition, SquareMatrixQ, SymmetricMatrixQ, Transpose, UnitaryMatrixQ, UpperTriangularize, UpperTriangularMatrixQ, VectorAngle, ZeroTest

Machine Learning (60)


AcceptanceThreshold, ActiveClassification, ActiveClassificationObject, ActivePrediction, ActivePredictionObject, AmbiguityFunction, AmbiguityList, AnomalyDetection, AnomalyDetectorFunction, AssumeDeterministic, AudioIdentify, BayesianMaximization, BayesianMaximizationObject, BayesianMinimization, BayesianMinimizationObject, ClassifierFunction, ClassifierMeasurements, ClassifierMeasurementsObject, Classify, ClassPriors, DeleteAnomalies, DimensionReduce, DimensionReducerFunction, DimensionReduction, FacialFeatures, FeatureDistance, FeatureExtract, FeatureExtraction, FeatureExtractor, FeatureExtractorFunction, FeatureNames, FeatureNearest, FeatureSpacePlot, FeatureSpacePlot3D, FeatureTypes, FindAnomalies, ImageAugmentationLayer, ImageBoundingBoxes, ImageCases, ImageContainsQ, ImageContents, ImageIdentify, ImageInstanceQ, IndeterminateThreshold, InitialEvaluationHistory, LearnDistribution, LearnedDistribution, MaxOverlapFraction, MissingValuePattern, Predict, PredictorFunction, PredictorMeasurements, PredictorMeasurementsObject, RecognitionPrior, SequencePredict, SequencePredictorFunction, SpecificityGoal, SynthesizeMissingValues, UtilityFunction, ValidationSet

Notebook (60)


AutoCopy, CreateCellID, CreateDocument, CreateNotebook, CreateWindow, DocumentNotebook, EvaluationElements, EvaluationNotebook, InputNotebook, InsertResults, Interactive, Notebook, NotebookApply, NotebookAutoSave, NotebookClose, NotebookDelete, NotebookEvaluate, NotebookEventActions, NotebookFind, NotebookGet, NotebookImport, NotebookInformation, NotebookLocate, NotebookObject, NotebookOpen, NotebookPrint, NotebookPut, NotebookRead, Notebooks, NotebookSave, NotebookSelection, NotebookWrite, ParentNotebook, Paste, PlaceholderReplace, PrintingStyleEnvironment, PrivateNotebookOptions, ScreenStyleEnvironment, ScrollingOptions, SelectedNotebook, SelectionEvaluate, SelectionMove, SetSelectedNotebook, ShowSelection, SpellingOptions, Visible, WindowClickSelect, WindowElements, WindowFloating, WindowFrame, WindowFrameElements, WindowMargins, WindowOpacity, WindowSize, WindowStatusArea, WindowTitle, WindowToolbars, WrapAround, $Canceled, $Notebooks

Date (59)


AbsoluteTime, BusinessDayQ, CalendarConvert, CalendarData, CalendarType, CurrentDate, DateBounds, Dated, DateDifference, DateFormat, DateFunction, DateObject, DateObjectQ, DateOverlapsQ, DatePattern, DatePlus, DateRange, DateString, DateValue, DateWithinQ, DayCount, DayCountConvention, DaylightQ, DayMatchQ, DayName, DayPlus, DayRange, DayRound, Friday, FromAbsoluteTime, FromJulianDate, FromUnixTime, HolidayCalendar, JulianDate, LeapYearQ, LocalTime, LocalTimeZone, Monday, NextDate, Now, PreviousDate, Saturday, Sunday, Thursday, TimeObject, TimeObjectQ, TimeZone, TimeZoneConvert, TimeZoneOffset, Today, Tomorrow, Tuesday, UnixTime, Wednesday, Yesterday, $DateStringFormat, $SystemTimeZone, $TimeZone, $TimeZoneEntity

Clustering (52)


BinaryDistance, BrayCurtisDistance, CanberraDistance, CanonicalWarpingCorrespondence, CanonicalWarpingDistance, ChessboardDistance, ClusterClassify, ClusterDissimilarityFunction, ClusteringTree, CorrelationDistance, CosineDistance, CriterionFunction, DamerauLevenshteinDistance, Dendrogram, DiceDissimilarity, DistanceFunction, DistanceMatrix, EditDistance, EuclideanDistance, FindClusters, GapPenalty, HammingDistance, JaccardDissimilarity, LongestCommonSequence, LongestCommonSequencePositions, LongestCommonSubsequence, LongestCommonSubsequencePositions, LongestOrderedSequence, ManhattanDistance, MatchingDissimilarity, MeanShift, Nearest, NearestFunction, NearestNeighborGraph, NearestTo, NeedlemanWunschSimilarity, NormalizedSquaredEuclideanDistance, RogersTanimotoDissimilarity, RussellRaoDissimilarity, SequenceAlignment, SequenceCases, SequenceCount, SequencePosition, SequenceReplace, SequenceSplit, SimilarityRules, SmithWatermanSimilarity, SokalSneathDissimilarity, SquaredEuclideanDistance, WarpingCorrespondence, WarpingDistance, YuleDissimilarity

Graphics Primitive (51)


AASTriangle, AffineHalfSpace, AffineSpace, Annulus, Arrow, ASATriangle, Ball, BezierCurve, BSplineCurve, CapsuleShape, Circle, Circumsphere, Cone, ConicHullRegion, Cube, Cuboid, Cylinder, DiskSegment, Dodecahedron, Ellipsoid, EmptyRegion, FilledCurve, FullRegion, GraphicsComplex, HalfLine, HalfPlane, HalfSpace, Hexahedron, Hyperplane, Icosahedron, InfiniteLine, InfinitePlane, Insphere, JoinedCurve, Octahedron, Parallelepiped, Parallelogram, Polyhedron, Prism, Rectangle, RegularPolygon, SASTriangle, ShellRegion, Simplex, Sphere, SphericalShell, SSSTriangle, StadiumShape, Tetrahedron, Triangle, Tube

Form (48)


AccountingForm, BaseForm, CapForm, CForm, DecimalForm, DefaultPrintPrecision, DigitBlock, DisplayForm, EdgeForm, EngineeringForm, ExponentFunction, ExponentStep, FaceForm, FormatType, FortranForm, FullForm, HoldForm, JoinForm, MathMLForm, MatrixForm, NumberForm, NumberFormat, NumberMarks, NumberMultiplier, NumberPadding, NumberPoint, NumberSeparator, NumberSigns, OutputForm, PaddedForm, PercentForm, PrecedenceForm, QuantityForm, ScientificForm, ScientificNotationThreshold, SignPadding, StandardForm, StringForm, SyntaxForm, TableAlignments, TableDepth, TableDirections, TableForm, TableHeadings, TableSpacing, TeXForm, TraditionalForm, TreeForm

Stream (44)


AnchoredSearch, BinaryFormat, Byte, Character, Close, DefineInputStreamMethod, DefineOutputStreamMethod, EndOfBuffer, EndOfFile, Expression, Find, FindList, InputStream, NullRecords, NullWords, Number, OutputStream, Read, ReadLine, ReadList, ReadString, Record, RecordLists, RecordSeparators, RemoveInputStreamMethod, RemoveOutputStreamMethod, SetStreamPosition, Skip, Streams, StringToStream, TokenWords, TotalWidth, Word, WordSearch, WordSeparators, Write, WriteLine, $BatchInput, $BatchOutput, $Echo, $Input, $InputStreamMethods, $Output, $OutputStreamMethods

Statistical Test (42)


AndersonDarlingTest, AutocorrelationTest, BaringhausHenzeTest, BlomqvistBetaTest, BrownForsytheTest, ConoverTest, CorrelationTest, CramerVonMisesTest, DistributionFitTest, FisherRatioTest, GoodmanKruskalGammaTest, HoeffdingDTest, IndependenceTest, JarqueBeraALMTest, KendallTauTest, KolmogorovSmirnovTest, KuiperTest, LeveneTest, LocationEquivalenceTest, LocationTest, LogRankTest, MannWhitneyTest, MardiaCombinedTest, MardiaKurtosisTest, MardiaSkewnessTest, PairedTTest, PairedZTest, PearsonChiSquareTest, PearsonCorrelationTest, PillaiTraceTest, ShapiroWilkTest, SiegelTukeyTest, SignedRankTest, SignTest, SpearmanRankTest, TTest, UnitRootTest, VarianceEquivalenceTest, VarianceTest, WatsonUSquareTest, WilksWTest, ZTest

Statistical Process (41)


ARCHProcess, ARIMAProcess, ARMAProcess, ARProcess, BernoulliProcess, BinomialProcess, BrownianBridgeProcess, CompoundPoissonProcess, CompoundRenewalProcess, ContinuousMarkovProcess, CoxIngersollRossProcess, DiscreteMarkovProcess, EstimatedProcess, FARIMAProcess, FindHiddenMarkovStates, FindProcessParameters, FractionalBrownianMotionProcess, FractionalGaussianNoiseProcess, GARCHProcess, GeometricBrownianMotionProcess, HiddenMarkovProcess, InhomogeneousPoissonProcess, ItoProcess, MAProcess, MarkovProcessProperties, OrnsteinUhlenbeckProcess, PoissonProcess, ProcessEstimator, ProcessParameterAssumptions, ProcessParameterQ, QueueingNetworkProcess, QueueingProcess, RandomWalkProcess, RenewalProcess, SARIMAProcess, SARMAProcess, StratonovichProcess, TelegraphProcess, TransformedProcess, WhiteNoiseProcess, WienerProcess

Chart (39)


BarChart, BarChart3D, BarOrigin, BarSpacing, BoxWhiskerChart, BubbleChart, BubbleChart3D, BubbleScale, BubbleSizes, CandlestickChart, ChartBaseStyle, ChartElementFunction, ChartElements, ChartLabels, ChartLayout, ChartLegends, ChartStyle, DistributionChart, EventLabels, InteractiveTradingChart, KagiChart, LabelingFunction, LegendAppearance, LineBreakChart, PairedBarChart, PieChart, PieChart3D, Placed, PointFigureChart, RectangleChart, RectangleChart3D, RenkoChart, ScalingFunctions, SectorChart, SectorChart3D, SectorOrigin, SectorSpacing, TradingChart, TrendStyle

Polynomial (39)


AugmentedSymmetricPolynomial, CoefficientArrays, CoefficientList, CoefficientRules, CountRoots, Decompose, Discriminant, Exponent, FactorList, FactorSquareFree, FactorSquareFreeList, FactorTerms, FactorTermsList, FromCoefficientRules, GroebnerBasis, HornerForm, IrreduciblePolynomialQ, MonomialList, PolynomialExtendedGCD, PolynomialGCD, PolynomialLCM, PolynomialMod, PolynomialQ, PolynomialQuotient, PolynomialQuotientRemainder, PolynomialReduce, PolynomialRemainder, PowerSymmetricPolynomial, PrimitivePolynomialQ, Resultant, RootIntervals, SquareFreeQ, SubresultantPolynomialRemainders, SubresultantPolynomials, Subresultants, SymmetricPolynomial, SymmetricReduction, Trig, Variables

Arrow Operator (38)


DoubleDownArrow, DoubleLeftArrow, DoubleLeftRightArrow, DoubleLongLeftArrow, DoubleLongLeftRightArrow, DoubleLongRightArrow, DoubleRightArrow, DoubleUpArrow, DoubleUpDownArrow, DownArrow, DownArrowBar, DownArrowUpArrow, DownTeeArrow, LeftArrow, LeftArrowBar, LeftArrowRightArrow, LeftRightArrow, LeftTeeArrow, LongLeftArrow, LongLeftRightArrow, LongRightArrow, LowerLeftArrow, LowerRightArrow, RightArrow, RightArrowBar, RightArrowLeftArrow, RightTeeArrow, ShortDownArrow, ShortLeftArrow, ShortRightArrow, ShortUpArrow, UpArrow, UpArrowBar, UpArrowDownArrow, UpDownArrow, UpperLeftArrow, UpperRightArrow, UpTeeArrow

Machine (38)


Environment, OperatingSystem, SystemInformation, SystemInstall, SystemProcessData, SystemProcesses, $ActivationKey, $CommandLine, $CreationDate, $EvaluationEnvironment, $GeoLocationCity, $GeoLocationCountry, $GeoLocationSource, $LicenseExpirationDate, $LicenseID, $LicenseServer, $MachineAddresses, $MachineDomains, $MachineID, $MachineName, $MachineType, $NetworkConnected, $OperatingSystem, $ParentProcessID, $PathnameSeparator, $ProcessID, $ProcessorCount, $ProcessorType, $ReleaseNumber, $SessionID, $System, $SystemCharacterEncoding, $SystemID, $SystemShell, $SystemWordLength, $Username, $Version, $VersionNumber

(36)


ActiveStyle, ClearCookies, ConnectionSettings, CookieFunction, EmbedCode, ExternalOptions, FindCookies, FollowRedirects, HostLookup, HTTPRedirect, HTTPRequest, HTTPRequestData, Hyperlink, InstallService, IPAddress, SetCookies, URL, URLBuild, URLDecode, URLDispatcher, URLDownload, URLDownloadSubmit, URLEncode, URLExecute, URLExpand, URLParse, URLQueryDecode, URLQueryEncode, URLRead, URLResponseTime, URLShorten, URLSubmit, VerifySecurityCertificates, $Cookies, $CookieStore, $EmbedCodeEnvironments

Image Filter (35)


BilateralFilter, CommonestFilter, CornerFilter, CurvatureFlowFilter, DerivativeFilter, DifferentiatorFilter, EntropyFilter, FourierDCTFilter, GaborFilter, GaussianFilter, GeometricMeanFilter, GradientFilter, GradientOrientationFilter, HarmonicMeanFilter, HighpassFilter, HilbertFilter, ImageFilter, ImageSaliencyFilter, KuwaharaFilter, LaplacianFilter, LaplacianGaussianFilter, LowpassFilter, MaxFilter, MeanFilter, MeanShiftFilter, MedianFilter, MinFilter, NonlocalMeansFilter, PeronaMalikFilter, RangeFilter, RecurrenceFilter, RidgeFilter, StandardDeviationFilter, TotalVariationFilter, WienerFilter

Parallel (35)


AbortKernels, CloseKernels, CriticalSection, DistributedContexts, DistributeDefinitions, EvaluationObject, GetEnvironment, KernelObject, Kernels, LaunchKernels, ParallelArray, ParallelCombine, ParallelDo, ParallelEvaluate, Parallelize, ParallelMap, ParallelNeeds, ParallelProduct, ParallelSubmit, ParallelSum, ParallelTable, ParallelTry, SetEnvironment, SetSharedFunction, SetSharedVariable, TargetDevice, UnsetShared, WaitAll, WaitNext, $ConfiguredKernels, $DistributedContexts, $KernelCount, $KernelID, $SharedFunctions, $SharedVariables

Entity (34)


AggregatedEntityClass, CanonicalName, CombinedEntityClass, CommonName, DatabaseConnect, DatabaseDisconnect, DatabaseReference, Entity, EntityClass, EntityClassList, EntityCopies, EntityFunction, EntityGroup, EntityInstance, EntityList, EntityPrefetch, EntityProperties, EntityProperty, EntityPropertyClass, EntityRegister, EntityStore, EntityStores, EntityTypeName, EntityUnregister, EntityValue, ExtendedEntityClass, FilteredEntityClass, FromEntity, IncludeRelatedTables, RandomEntity, RelationalDatabase, SampledEntityClass, SortedEntityClass, ToEntity

Vector Tee Operator (34)


DoubleLeftTee, DoubleRightTee, DownLeftRightVector, DownLeftTeeVector, DownLeftVector, DownLeftVectorBar, DownRightTeeVector, DownRightVector, DownRightVectorBar, DownTee, LeftDownTeeVector, LeftDownVector, LeftDownVectorBar, LeftRightVector, LeftTee, LeftTeeVector, LeftUpDownVector, LeftUpTeeVector, LeftUpVector, LeftUpVectorBar, LeftVector, LeftVectorBar, RightDownTeeVector, RightDownVector, RightDownVectorBar, RightTee, RightTeeVector, RightUpDownVector, RightUpTeeVector, RightUpVector, RightUpVectorBar, RightVector, RightVectorBar, UpTee

Control Object (33)


ActionMenu, Animate, Animator, Checkbox, CheckboxBar, ClickPane, Clock, Control, CurrentValue, DefaultFieldHintStyle, Deploy, Deployed, Enabled, EventHandler, FieldCompletionFunction, GestureHandler, InputField, ListPicker, Locator, LocatorPane, Manipulate, Manipulator, MousePosition, Opener, PopupMenu, RadioButton, RadioButtonBar, Setter, SetterBar, Setting, Toggler, TogglerBar, Trigger

Style (33)


BaseStyle, Bold, CommunityBoundaryStyle, ContourStyle, DefaultGridLinesStyle, DefaultOptions, DefaultTicksStyle, ExclusionsStyle, FaceGridsStyle, FrameStyle, FrameTicksStyle, GeoGridLinesStyle, GridLinesStyle, Italic, ItemStyle, Large, Larger, Medium, MeshStyle, Plain, ScriptBaselineShifts, ScriptMinSize, ScriptSizeMultipliers, Small, Smaller, StreamStyle, Style, StyleData, StyleDefinitions, Tiny, TranslationOptions, Underlined, VectorStyle

Geodesy (32)


FindGeoLocation, GeoAntipode, GeoArea, GeoDestination, GeodesyData, GeoDirection, GeoDisplacement, GeoDistance, GeoDistanceList, GeoEntities, GeoGridDirectionDifference, GeoGridPosition, GeoGridUnitArea, GeoGridUnitDistance, GeoGridVector, GeoIdentify, GeoLength, GeoNearest, GeoPosition, GeoPositionENU, GeoPositionXYZ, GeoProjectionData, GeoVector, GeoVectorENU, GeoVectorXYZ, GeoWithinQ, Here, Latitude, LatitudeLongitude, Longitude, RandomGeoPosition, $GeoLocation

Geo Graphics (32)


DynamicGeoGraphics, GeoArraySize, GeoBackground, GeoBoundingBox, GeoBounds, GeoBubbleChart, GeoCenter, GeoGraphics, GeoGridLines, GeoGridRange, GeoGridRangePadding, GeoGroup, GeoHistogram, GeoImage, GeoLabels, GeoListPlot, GeoModel, GeoProjection, GeoRange, GeoRangePadding, GeoRegionValuePlot, GeoResolution, GeoScaleBar, GeoServer, GeoSmoothHistogram, GeoStreamPlot, GeoStyling, GeoStylingImageFunction, GeoVariant, GeoVectorPlot, GeoZoomLevel, MissingStyle

Named Group (32)


AbelianGroup, AlternatingGroup, BabyMonsterGroupB, ConwayGroupCo1, ConwayGroupCo2, ConwayGroupCo3, CyclicGroup, DihedralGroup, FischerGroupFi22, FischerGroupFi23, FischerGroupFi24Prime, HaradaNortonGroupHN, HeldGroupHe, HigmanSimsGroupHS, JankoGroupJ1, JankoGroupJ2, JankoGroupJ3, JankoGroupJ4, LyonsGroupLy, MathieuGroupM11, MathieuGroupM12, MathieuGroupM22, MathieuGroupM23, MathieuGroupM24, McLaughlinGroupMcL, MonsterGroupM, ONanGroupON, RudvalisGroupRu, SuzukiGroupSuz, SymmetricGroup, ThompsonGroupTh, TitsGroupT

Recurrence (32)


Casoratian, DeBruijnSequence, DifferenceRoot, DifferenceRootReduce, Differences, DirichletConvolve, DirichletTransform, DiscreteChirpZTransform, DiscreteConvolve, DiscreteHadamardTransform, DiscreteRatio, DiscreteShift, ExponentialGeneratingFunction, FareySequence, FindGeneratingFunction, FindLinearRecurrence, FindSequenceFunction, FourierSequenceTransform, FunctionSpace, GeneratingFunction, InverseFourierSequenceTransform, InverseZTransform, LinearRecurrence, Ratios, RSolve, RSolveValue, RudinShapiro, ShiftRegisterSequence, SubstitutionSystem, ThueMorse, ValidationLength, ZTransform

Restructuring (31)


AddSides, Apart, ApartSquareFree, ApplySides, Assuming, Assumptions, ComplexExpand, ComplexityFunction, DivideSides, ExcludedForms, ExpandAll, ExpandDenominator, ExpandNumerator, ExpToTrig, FullSimplify, FunctionExpand, MeijerGReduce, MultiplySides, PiecewiseExpand, PowerExpand, Refine, Simplify, SubtractSides, TargetFunctions, TransformationFunctions, TrigExpand, TrigFactor, TrigFactorList, TrigReduce, TrigToExp, $Assumptions

Wavelet (31)


BattleLemarieWavelet, BiorthogonalSplineWavelet, CDFWavelet, CoifletWavelet, ContinuousWaveletData, ContinuousWaveletTransform, DaubechiesWavelet, DGaussianWavelet, DiscreteWaveletData, DiscreteWaveletPacketTransform, DiscreteWaveletTransform, GaborWavelet, HaarWavelet, InverseContinuousWaveletTransform, InverseWaveletTransform, LiftingWaveletTransform, MexicanHatWavelet, MeyerWavelet, MorletWavelet, PaulWavelet, ReverseBiorthogonalSplineWavelet, ShannonWavelet, StationaryWaveletTransform, SymletWavelet, WaveletBestBasis, WaveletMapIndexed, WaveletPhi, WaveletPsi, WaveletScale, WaveletScalogram, WaveletThreshold

Box (30)


AdjustmentBox, BoxData, BoxObject, ButtonBox, ErrorBox, EvaluationBox, FormBox, FractionBox, FrameBox, GridBox, InterpretationBox, ListPickerBox, MakeBoxes, OverscriptBox, ParentBox, RadicalBox, RawBoxes, RowBox, SqrtBox, StripBoxes, StripWrapperBoxes, StyleBox, SubscriptBox, SubsuperscriptBox, SuperscriptBox, TagBox, TemplateBox, ToBoxes, UnderoverscriptBox, UnderscriptBox

Solving (30)


CylindricalDecomposition, DEigensystem, DEigenvalues, DependentVariables, DifferentialRoot, DifferentialRootReduce, DSolve, DSolveValue, Eliminate, GeneratedParameters, GenericCylindricalDecomposition, InverseFunctions, MaxExtraConditions, NBodySimulation, NBodySimulationData, NDEigensystem, NDEigenvalues, NDSolve, NDSolveValue, NSolve, ParametricFunction, ParametricNDSolve, ParametricNDSolveValue, Reduce, SemialgebraicComponentInstances, Solve, SolveAlways, ToRules, VerifySolutions, WhenEvent

Association (29)


AssociateTo, Association, AssociationFormat, AssociationMap, AssociationQ, AssociationThread, Catenate, JoinAcross, Key, KeyCollisionFunction, KeyComplement, KeyDrop, KeyDropFrom, KeyExistsQ, KeyFreeQ, KeyIntersection, KeyMap, KeyMemberQ, Keys, KeySelect, KeySort, KeySortBy, KeyTake, KeyUnion, KeyValueMap, KeyValuePattern, Lookup, Merge, Values

Box Options (28)


AdjustmentBoxOptions, AutoDelete, ButtonBoxOptions, ColumnAlignments, ColumnLines, ColumnsEqual, ColumnSpacings, ColumnWidths, FormBoxOptions, FractionBoxOptions, FrameBoxOptions, InterpretationBoxOptions, ListPickerBoxOptions, OverscriptBoxOptions, RadicalBoxOptions, RowAlignments, RowLines, RowMinHeight, RowsEqual, RowSpacings, SqrtBoxOptions, SubscriptBoxOptions, SubsuperscriptBoxOptions, SuperscriptBoxOptions, TagBoxOptions, TemplateBoxOptions, UnderoverscriptBoxOptions, UnderscriptBoxOptions

Calculus (28)


C, Constants, Convolve, D, Derivative, Direction, Dt, FunctionDomain, FunctionPeriod, FunctionRange, GenerateConditions, GreenFunction, HankelTransform, Integrate, InverseHankelTransform, InverseMellinTransform, InverseRadonTransform, Limit, MaxLimit, MellinConvolve, MellinTransform, MinLimit, NIntegrate, NonConstants, PrincipalValue, RadonTransform, Residue, Wronskian

Graph Boolean Property (28)


AcyclicGraphQ, BipartiteGraphQ, CompleteGraphQ, ConnectedGraphQ, DirectedGraphQ, EdgeCoverQ, EdgeQ, EmptyGraphQ, EulerianGraphQ, GraphQ, HamiltonianGraphQ, IndependentEdgeSetQ, IndependentVertexSetQ, IsomorphicGraphQ, KEdgeConnectedGraphQ, KVertexConnectedGraphQ, LoopFreeGraphQ, MixedGraphQ, MultigraphQ, PathGraphQ, PlanarGraphQ, SimpleGraphQ, TreeGraphQ, UndirectedGraphQ, VertexCoverQ, VertexQ, WeaklyConnectedGraphQ, WeightedGraphQ

Number Theory (28)


ChineseRemainder, CompositeQ, CoprimeQ, Divisible, DivisorSum, ExtendedGCD, FindIntegerNullVector, FrobeniusNumber, FrobeniusSolve, GaussianIntegers, IntegerPartitions, MersennePrimeExponent, MersennePrimeExponentQ, MixedRadix, ModularInverse, NumberCompose, NumberDecompose, NumberExpand, PerfectNumber, PerfectNumberQ, PowerMod, PowerModList, PowersRepresentations, PrimePowerQ, Primes, PrimitiveRootList, RandomPrime, SquaresR

Quantity (28)


CommonUnits, CompatibleUnitQ, DatedUnit, DimensionalCombinations, GeneratedQuantityMagnitudes, IncludeQuantities, IndependentPhysicalQuantity, IndependentUnit, IndependentUnitDimension, KnownUnitQ, MixedMagnitude, MixedRadixQuantity, MixedUnit, NondimensionalizationTransform, PlanckRadiationLaw, Quantity, QuantityArray, QuantityDistribution, QuantityMagnitude, QuantityQ, QuantityUnit, TargetUnits, UnitConvert, UnitDimensions, UnitSimplify, UnitSystem, UnityDimensions, $UnitSystem

Array (27)


ArrayComponents, ArrayFilter, ArrayFlatten, ArrayPad, ArrayResample, ArrayReshape, ArrayRules, Band, CellularAutomaton, CenterArray, ClusteringComponents, ConstantArray, CoordinateBoundingBox, CoordinateBoundingBoxArray, CoordinateBounds, CoordinateBoundsArray, Downsample, FindPeaks, FlattenAt, KarhunenLoeveDecomposition, PadLeft, PadRight, PeakDetect, Subsequences, Total, TuringMachine, Upsample

Molecule (27)


Atom, AtomCoordinates, AtomCount, AtomDiagramCoordinates, AtomList, Bond, BondCount, BondList, BondQ, ConnectedMoleculeComponents, ConnectedMoleculeQ, FindMoleculeSubstructure, IncludeAromaticBonds, IncludeHydrogens, Molecule, MoleculeContainsQ, MoleculeEquivalentQ, MoleculeGraph, MoleculeModify, MoleculePattern, MoleculePlot, MoleculePlot3D, MoleculeProperty, MoleculeQ, MoleculeValue, StereochemistryElements, ValenceErrorHandling

Template (26)


AutoRemove, CombinerFunction, DeliveryFunction, DocumentGenerator, DocumentGeneratorInformation, DocumentGenerators, EpilogFunction, FileTemplate, FileTemplateApply, GeneratedDocumentBinding, GenerateDocument, GeneratorDescription, GeneratorHistoryLength, GeneratorOutputType, InsertionFunction, NotebookTemplate, StringTemplate, TemplateApply, TemplateExpression, TemplateIf, TemplateObject, TemplateSequence, TemplateSlot, TemplateWith, XMLTemplate, $TemplatePath

Tensor (26)


Antisymmetric, Arrays, HodgeDual, Indexed, KroneckerProduct, LeviCivitaTensor, Matrices, StructuredArray, Symmetric, Symmetrize, SymmetrizedArray, SymmetrizedArrayRules, SymmetrizedDependentComponents, SymmetrizedIndependentComponents, SymmetrizedReplacePart, TensorContract, TensorDimensions, TensorExpand, TensorProduct, TensorRank, TensorReduce, TensorSymmetry, TensorTranspose, TensorWedge, Vectors, ZeroSymmetric

Control Object Options (25)


AnimationDirection, AnimationRate, AnimationRepetitions, AnimationRunning, AnimationRunTime, AnimationTimeIndex, Appearance, AppearanceElements, AppearanceRules, AutoAction, AutorunSequencing, Backward, Bookmarks, ContentSize, ContinuousAction, ControlActive, ControlPlacement, ControlsRendering, ControlType, DefaultDuration, Delimiter, DisplayAllSteps, Forward, ForwardBackward, TrackingFunction

List (25)


Accumulate, AnglePath, AnglePath3D, AngleVector, CirclePoints, ContainsAll, ContainsAny, ContainsExactly, ContainsNone, ContainsOnly, FactorInteger, FindDivisions, FindRepeat, FindTransientRepeat, LatticeReduce, ListConvolve, ListCorrelate, ListDeconvolve, RotateLeft, RotateRight, Signature, SpherePoints, Subdivide, Unitize, UnitVector

Front End Options (24)


AutoIndent, AutoItalicWords, AutoMultiplicationSymbol, AutoScroll, AutoSpacing, CodeAssistOptions, ContentPadding, DefaultElement, DelimiterFlashTime, Delimiters, Dividers, Evaluator, FieldHint, FieldHintStyle, FieldMasked, FieldSize, FrontEndDynamicExpression, FrontEndEventActions, GridDefaultElement, InputAliases, Magnification, OutputSizeLimit, RenderingOptions, RulerUnits

Math Function Windows (24)


BartlettHannWindow, BartlettWindow, BlackmanHarrisWindow, BlackmanNuttallWindow, BlackmanWindow, BohmanWindow, CauchyWindow, ConnesWindow, CosineWindow, DirichletWindow, ExactBlackmanWindow, FlatTopWindow, GaussianWindow, HammingWindow, HannPoissonWindow, HannWindow, KaiserBesselWindow, KaiserWindow, LanczosWindow, NuttallWindow, ParzenWindow, PoissonWindow, TukeyWindow, WelchWindow

Time Series (24)


AdjustTimeSeriesForecast, EventSeries, IncludeWindowTimes, MinimumTimeIncrement, MovingMap, RegularlySampledQ, ResamplingMethod, TemporalRegularity, TimeSeries, TimeSeriesAggregate, TimeSeriesForecast, TimeSeriesInsert, TimeSeriesInvertibility, TimeSeriesMap, TimeSeriesMapThread, TimeSeriesModel, TimeSeriesModelFit, TimeSeriesResample, TimeSeriesRescale, TimeSeriesShift, TimeSeriesThread, TimeSeriesWindow, ToInvertibleTimeSeries, ValueDimensions

Gauge (22)


AngularGauge, BulletGauge, ClockGauge, DefaultLabelStyle, GaugeFaceElementFunction, GaugeFaceStyle, GaugeFrameElementFunction, GaugeFrameSize, GaugeFrameStyle, GaugeLabels, GaugeMarkers, GaugeStyle, HorizontalGauge, LabelStyle, ScaleDivisions, ScaleOrigin, ScalePadding, ScaleRanges, ScaleRangeStyle, ThermometerGauge, TicksStyle, VerticalGauge

Min Max (22)


ArgMax, ArgMin, FindArgMax, FindArgMin, FindCurvePath, FindMaximum, FindMaxValue, FindMinimum, FindMinValue, FindShortestTour, KnapsackSolve, LinearProgramming, Maximize, MaxValue, Minimize, MinValue, NArgMax, NArgMin, NMaximize, NMaxValue, NMinimize, NMinValue

Group Theory (21)


CayleyGraph, CycleIndexPolynomial, FiniteAbelianGroupCount, FiniteGroupCount, FiniteGroupData, GroupActionBase, GroupCentralizer, GroupElementFromWord, GroupElementPosition, GroupElementQ, GroupElements, GroupElementToWord, GroupGenerators, GroupMultiplicationTable, GroupOrbits, GroupOrder, GroupSetwiseStabilizer, GroupStabilizer, GroupStabilizerChain, PermutationGroup, RightCosetRepresentative

Link (21)


DisplayPacket, Install, LinkActivate, LinkClose, LinkConnect, LinkCreate, LinkInterrupt, LinkLaunch, LinkObject, LinkPatterns, LinkProtocol, LinkRead, LinkReadyQ, Links, LinkWrite, SourceLink, Uninstall, $CurrentLink, $Linked, $ParentLink, $SourceLink

Logic (21)


AxiomaticTheory, Conjunction, Disjunction, Equivalent, Exists, FindEquationalProof, FindInstance, ForAll, Implies, LogicalExpand, Majority, Nand, ProofObject, Resolve, SatisfiabilityCount, SatisfiabilityInstances, SatisfiableQ, TautologyQ, UnateQ, Xnor, Xor

Search (21)


AddToSearchIndex, ContentFieldOptions, ContentLocationFunction, ContentObject, CreateSearchIndex, DeleteSearchIndex, DocumentWeightingRules, FindTextualAnswer, MaxWordGap, SearchAdjustment, SearchIndexObject, SearchIndices, SearchQueryString, SearchResultObject, TextSearch, TextSearchReport, UpdateSearchIndex, WebAudioSearch, WebImageSearch, WebSearch, WikipediaSearch

Boolean (20)


AllTrue, AnyTrue, Boole, BooleanConsecutiveFunction, BooleanConvert, BooleanCountingFunction, BooleanFunction, BooleanGraph, BooleanMaxterms, BooleanMinimize, BooleanMinterms, BooleanQ, Booleans, BooleanTable, BooleanVariables, ConditionalExpression, DiscreteIndicator, NoneTrue, TrueQ, Undefined

Compile (20)


CompilationOptions, CompilationTarget, Compile, Compiled, CompiledCodeFunction, CompiledFunction, CompilerOptions, FunctionCompile, FunctionCompileExport, FunctionCompileExportByteArray, FunctionCompileExportLibrary, FunctionCompileExportString, KernelFunction, Parallelization, RuntimeAttributes, RuntimeOptions, TargetSystem, Typed, TypeSpecifier, $CompilationTarget

Directory (20)


CopyDirectory, CreateDirectory, CreateIntermediateDirectories, DeleteDirectory, Directory, DirectoryName, DirectoryQ, DirectoryStack, ParentDirectory, RenameDirectory, ResetDirectory, SetDirectory, $BaseDirectory, $HomeDirectory, $InitialDirectory, $InstallationDirectory, $RootDirectory, $TemporaryDirectory, $UserBaseDirectory, $UserDocumentsDirectory

Extraction (20)


Commonest, Delete, DeleteDuplicates, DeleteDuplicatesBy, Drop, MaximalBy, MinimalBy, MinMax, Pick, RankedMax, RankedMin, SelectFirst, TakeDrop, TakeLargest, TakeLargestBy, TakeList, TakeSmallest, TakeSmallestBy, TakeWhile, UpTo

Fitting (20)


ConfidenceLevel, CovarianceEstimatorFunction, DesignMatrix, DispersionEstimatorFunction, ExponentialFamily, FindFormula, FitRegularization, FittedModel, GeneralizedLinearModelFit, IncludeConstantBasis, LeastSquares, LinearModelFit, LinearOffsetFunction, LinkFunction, LogitModelFit, NominalVariables, NonlinearModelFit, ProbitModelFit, VarianceEstimatorFunction, Weights

Geometric Transform (20)


AffineTransform, EulerAngles, EulerMatrix, FindGeometricTransform, GeometricTransformation, LinearFractionalTransform, ReflectionMatrix, ReflectionTransform, RescalingTransform, RollPitchYawAngles, RollPitchYawMatrix, RotationMatrix, RotationTransform, ScalingMatrix, ScalingTransform, ShearingMatrix, ShearingTransform, TransformationFunction, TransformationMatrix, TranslationTransform

Numerics Precision (20)


Accuracy, AccuracyGoal, Chop, ExactNumberQ, InexactNumberQ, MachineNumberQ, MachinePrecision, Precision, SetAccuracy, SetPrecision, $MachineEpsilon, $MachinePrecision, $MaxExtraPrecision, $MaxMachineNumber, $MaxNumber, $MaxPrecision, $MinMachineNumber, $MinNumber, $MinPrecision, $PerformanceGoal

Channel (19)


Anonymous, ChannelBase, ChannelBrokerAction, ChannelDatabin, ChannelListen, ChannelListener, ChannelListeners, ChannelObject, ChannelPreSendFunction, ChannelReceiverFunction, ChannelSend, ChannelSubscribers, CreateChannel, DeleteChannel, FindChannels, RemoveChannelListener, RemoveChannelSubscribers, $AllowExternalChannelFunctions, $ChannelBase

Matrix (19)


ArrayPlot, BoxMatrix, CrossMatrix, DiagonalMatrix, DiamondMatrix, DiskMatrix, FourierDCTMatrix, FourierDSTMatrix, FourierMatrix, GaborMatrix, GaussianMatrix, HadamardMatrix, HankelMatrix, HilbertMatrix, MatrixPlot, PauliMatrix, SavitzkyGolayMatrix, ShenCastanMatrix, ToeplitzMatrix

Named Graph (19)


ButterflyGraph, CirculantGraph, CompleteGraph, CompleteKaryTree, CycleGraph, DeBruijnGraph, GridGraph, HararyGraph, HypercubeGraph, KaryTree, KirchhoffGraph, KnightTourGraph, LineGraph, PathGraph, PetersenGraph, StarGraph, TreeGraph, TuranGraph, WheelGraph

Packet (19)


BeginDialogPacket, CallPacket, DisplayEndPacket, EndDialogPacket, EnterExpressionPacket, EnterTextPacket, EvaluatePacket, InputNamePacket, InputPacket, InputStringPacket, MenuPacket, MessagePacket, OutputNamePacket, ReturnExpressionPacket, ReturnPacket, ReturnTextPacket, StationaryWaveletPacketTransform, SyntaxPacket, TextPacket

Device (18)


DeviceClose, DeviceConfigure, DeviceExecute, DeviceExecuteAsynchronous, DeviceObject, DeviceOpen, DeviceRead, DeviceReadBuffer, DeviceReadLatest, DeviceReadList, DeviceReadTimeSeries, Devices, DeviceStreams, DeviceWrite, DeviceWriteBuffer, FindDevices, ImagingDevice, $ImagingDevice

Messages And Printing (18)


Assert, MessageList, MessageName, Messages, Off, On, PrintTemporary, Quiet, Shallow, Short, Skeleton, $AssertFunction, $Language, $MessageGroups, $MessageList, $MessagePrePrint, $Messages, $NewMessage

Binary Data (17)


BaseDecode, BaseEncode, BinaryDeserialize, BinaryRead, BinaryReadList, BinarySerialize, BinaryWrite, ByteArray, ByteArrayFormat, ByteArrayQ, ByteArrayToString, ByteOrdering, ExportByteArray, ImportByteArray, ReadByteArray, StringToByteArray, $ByteOrdering

Debug (17)


Echo, EchoFunction, MatchLocalNames, Stack, StackBegin, StackComplete, StackInhibit, Trace, TraceAbove, TraceBackward, TraceDepth, TraceForward, TraceOff, TraceOn, TraceOriginal, TracePrint, TraceScan

Discrete Fourier (17)


Cepstrogram, CepstrogramArray, CepstrumArray, FourierDCT, FourierDST, FourierParameters, InverseFourier, InverseShortTimeFourier, InverseSpectrogram, ListFourierSequenceTransform, ListZTransform, Periodogram, PeriodogramArray, ShortTimeFourier, ShortTimeFourierData, Spectrogram, SpectrogramArray

Histogram (17)


BinCounts, BinLists, DateHistogram, DateReduction, DensityHistogram, Histogram, Histogram3D, HistogramDistribution, HistogramList, HistogramTransform, HistogramTransformInterpolation, ImageHistogram, PairedHistogram, PairedSmoothHistogram, SmoothDensityHistogram, SmoothHistogram, SmoothHistogram3D

Numeric (17)


DifferenceQuotient, DiscreteVariables, EvaluationMonitor, Gradient, MaxIterations, MaxRecursion, MaxStepFraction, MaxSteps, MaxStepSize, Method, NormFunction, PerformanceGoal, PrecisionGoal, StartingStepSize, StepMonitor, Tolerance, WorkingPrecision

Permutation (17)


Cycles, FindPermutation, InversePermutation, PermutationCycles, PermutationCyclesQ, PermutationLength, PermutationList, PermutationListQ, PermutationMax, PermutationMin, PermutationOrder, PermutationPower, PermutationProduct, PermutationReplace, PermutationSupport, Permute, RandomPermutation

Symbol Information (17)


Constant, Flat, Locked, NHoldAll, NHoldFirst, NHoldRest, NumericFunction, OneIdentity, OptionValue, Orderless, Protected, ReadProtected, SequenceHold, SetSystemOptions, Stub, SystemOptions, Temporary

System Model (17)


ConnectSystemModelComponents, CreateDataSystemModel, CreateSystemModel, FindSystemModelEquilibrium, SetSystemModel, SystemModel, SystemModeler, SystemModelExamples, SystemModelLinearize, SystemModelParametricSimulate, SystemModelPlot, SystemModelProgressReporting, SystemModelReliability, SystemModels, SystemModelSimulate, SystemModelSimulateSensitivity, SystemModelSimulationData

Cryptography (16)


Decrypt, DecryptFile, DerivedKey, DigitalSignature, Encrypt, EncryptedObject, EncryptFile, GenerateAsymmetricKeyPair, GenerateDerivedKey, GenerateDigitalSignature, GenerateSymmetricKey, PrivateKey, PublicKey, SymmetricKey, VerifyDerivedKey, VerifyDigitalSignature

Structural (16)


GroupBy, Groupings, Heads, Insert, Nothing, Order, Ordering, OrderingBy, Position, PositionIndex, ReverseSort, ReverseSortBy, Riffle, SortedBy, Split, SplitBy

Time Memory (16)


AbsoluteTiming, MaxMemoryUsed, MemoryAvailable, MemoryConstrained, MemoryConstraint, MemoryInUse, Pause, RepeatedTiming, SessionTime, Share, TimeConstrained, TimeConstraint, TimeGoal, TimeUsed, $TimedOut, $TimeUnit

Code Action (15)


BlockMap, FixedPoint, FixedPointList, FoldPair, FoldPairList, MapAll, MapIndexed, NestList, NestWhile, NestWhileList, Operate, SequenceFold, SequenceFoldList, SubsetMap, Through

Continuous Fourier (15)


FourierCoefficient, FourierCosCoefficient, FourierCosSeries, FourierCosTransform, FourierSeries, FourierSinCoefficient, FourierSinSeries, FourierSinTransform, FourierTransform, FourierTrigSeries, InverseFourierCosTransform, InverseFourierSinTransform, InverseFourierTransform, InverseLaplaceTransform, LaplaceTransform

Domain (15)


Element, NegativeIntegers, NegativeRationals, NegativeReals, NonNegativeIntegers, NonNegativeRationals, NonNegativeReals, NonPositiveIntegers, NonPositiveRationals, NonPositiveReals, NotElement, PositiveIntegers, PositiveRationals, PositiveReals, Rationals

External Process (15)


KillProcess, ProcessConnection, ProcessDirectory, ProcessEnvironment, Processes, ProcessInformation, ProcessObject, ProcessStatus, RemoteAuthorizationCaching, RemoteConnect, RemoteConnectionObject, RemoteRun, RemoteRunProcess, RunProcess, StartProcess

Integer (15)


DigitCount, FromCharacterCode, FromDigits, FromRomanNumeral, IntegerDigits, IntegerExponent, IntegerLength, IntegerName, IntegerPart, IntegerReverse, Integers, IntegerString, QuotientRemainder, RealDigits, RomanNumeral

Interpreter (15)


DelimitedSequence, ExcludedLines, GeoLocation, HeaderLines, ImportOptions, Interpreter, MissingDataRules, RectangularRepeatingElement, RepeatingElement, Restricted, SemanticImport, SemanticImportString, SemanticInterpretation, SquareRepeatingElement, $InterpreterTypes

Socket (15)


NetworkPacketCapture, NetworkPacketRecording, NetworkPacketTrace, SocketConnect, SocketListen, SocketListener, SocketObject, SocketOpen, SocketReadMessage, SocketReadyQ, Sockets, SocketWaitAll, SocketWaitNext, $DefaultNetworkInterface, $NetworkInterfaces

Vector Calculus (15)


ArcCurvature, ArcLength, CoordinateChartData, CoordinateTransform, CoordinateTransformData, Curl, Div, FrenetSerretSystem, FromPolarCoordinates, FromSphericalCoordinates, Grad, Laplacian, ToPolarCoordinates, ToSphericalCoordinates, TransformedField

Blockchain (14)


BlockchainAddressData, BlockchainBase, BlockchainBlockData, BlockchainContractValue, BlockchainData, BlockchainGet, BlockchainKeyEncode, BlockchainPut, BlockchainTokenData, BlockchainTransaction, BlockchainTransactionData, BlockchainTransactionSign, BlockchainTransactionSubmit, $BlockchainBase

Dynamic (14)


AbsoluteCurrentValue, Deinitialization, Dynamic, DynamicEvaluationTimeout, DynamicModule, DynamicModuleValues, DynamicSetting, DynamicWrapper, FinishDynamic, MouseAnnotation, MouseAppearance, Mouseover, NotebookDynamicExpression, $DynamicEvaluation

Library Link (14)


ConnectLibraryCallbackFunction, CreateManagedLibraryExpression, FindLibrary, LibraryDataType, LibraryFunction, LibraryFunctionError, LibraryFunctionInformation, LibraryFunctionLoad, LibraryFunctionUnload, LibraryLoad, LibraryUnload, ManagedLibraryExpressionID, ManagedLibraryExpressionQ, $LibraryPath

Sound (14)


Beep, EmitSound, ListPlay, Play, PlayRange, SampleDepth, SampledSoundFunction, SampledSoundList, SampleRate, Sound, SoundNote, SoundVolume, Speak, $SoundDisplayFunction

Dialog (13)


AuthenticationDialog, ChoiceDialog, CreateDialog, Dialog, DialogInput, DialogNotebook, DialogProlog, DialogReturn, DialogSymbols, MessageDialog, Modal, SystemDialogInput, TraceDialog

Environment (13)


ClearSystemCache, Exit, In, InString, Quit, Update, $HistoryLength, $IterationLimit, $Post, $Pre, $PrePrint, $PreRead, $RecursionLimit

Signal Processing (13)


BandpassFilter, BandstopFilter, BesselFilterModel, BiquadraticFilterModel, ButterworthFilterModel, Chebyshev1FilterModel, Chebyshev2FilterModel, EllipticFilterModel, EquirippleFilterKernel, FrequencySamplingFilterKernel, KalmanFilter, LeastSquaresFilterKernel, ResamplingAlgorithmData

Astronomy (12)


AltitudeMethod, CelestialSystem, EclipseType, LunarEclipse, MoonPhase, MoonPosition, SiderealTime, SolarEclipse, SunPosition, Sunrise, Sunset, TimeDirection

Geo Graphics Primitive (12)


DayHemisphere, DayNightTerminator, GeoBoundsRegion, GeoCircle, GeoDisk, GeoHemisphere, GeoHemisphereBoundary, GeoMarker, GeoPath, GeoVisibleRegion, GeoVisibleRegionBoundary, NightHemisphere

Root (12)


Cubics, FindRoot, Modulus, NRoots, Quartics, Root, RootOfUnityQ, RootReduce, Roots, RootSum, ToRadicals, $MaxRootDegree

Symbol Assignment (12)


AddTo, AppendTo, Decrement, DivideBy, Increment, PreDecrement, PreIncrement, PrependTo, Protect, SubtractFrom, TimesBy, Unprotect

Algebraic (11)


AlgebraicIntegerQ, AlgebraicNumber, AlgebraicNumberDenominator, AlgebraicNumberNorm, AlgebraicNumberPolynomial, AlgebraicNumberTrace, Algebraics, AlgebraicUnitQ, IsolatingInterval, MinimalPolynomial, RootApproximant

Alignment (11)


Above, Alignment, AlignmentPoint, Baseline, BaselinePosition, Below, Bottom, Center, Left, Right, Top

Asymptotic (11)


AsymptoticDSolveValue, AsymptoticEqual, AsymptoticEquivalent, AsymptoticGreater, AsymptoticGreaterEqual, AsymptoticIntegrate, AsymptoticLess, AsymptoticLessEqual, AsymptoticRSolveValue, AsymptoticSolve, AsymptoticSum

Button (11)


Button, ButtonBar, ButtonData, ButtonFunction, ButtonMinHeight, ButtonNotebook, ButtonSource, CancelButton, ChoiceButtons, DefaultButton, PasteButton

Code Interruption (11)


Abort, AbortProtect, Catch, CheckAbort, Failure, FailureQ, Interrupt, Success, Throw, $Aborted, $Failed

Discrete Calculus (11)


DifferenceDelta, DiscreteLimit, DiscreteMaxLimit, DiscreteMinLimit, NProduct, NSum, Product, Regularization, Sum, SumConvergence, VerifyConvergence

Finance (11)


Annuity, AnnuityDue, Cashflow, CurrencyConvert, EffectiveInterest, FinancialBond, FinancialDerivative, FinancialIndicator, InflationAdjust, InflationMethod, TimeValue

Geometric Scene (11)


AngleBisector, CircleThrough, FindGeometricConjectures, GeometricAssertion, Midpoint, PerpendicularBisector, RandomInstance, TriangleCenter, TriangleConstruct, TriangleMeasurement, UnconstrainedParameters

Pattern (11)


Alternatives, Except, Longest, Optional, OptionsPattern, OrderlessPatternSequence, PatternSequence, PatternTest, Repeated, RepeatedNull, Shortest

Resource (11)


DefineResourceFunction, PublisherID, ResourceData, ResourceFunction, ResourceObject, ResourceRegister, ResourceRemove, ResourceSearch, ResourceSubmit, ResourceUpdate, $PublisherID

Service (11)


EmbeddedService, SaveConnection, ServiceConnect, ServiceDisconnect, ServiceExecute, ServiceObject, ServiceRequest, ServiceSubmit, $EmbeddableServices, $ServiceCreditsAvailable, $Services

Annotation (10)


Annotation, AnnotationDelete, AnnotationRules, DefaultTooltipStyle, Monitor, ProgressIndicator, StatusArea, Tooltip, TooltipDelay, TooltipStyle

Bit (10)


BitAnd, BitClear, BitGet, BitLength, BitNot, BitOr, BitSet, BitShiftLeft, BitShiftRight, BitXor

Code Evaluation (10)


Activate, Defer, EvaluationData, HoldAllComplete, HoldComplete, IgnoringInactive, Inactivate, Inactive, ReleaseHold, Unevaluated

External Session (10)


ExternalEvaluate, ExternalFunction, ExternalObject, ExternalSessionObject, ExternalSessions, ExternalValue, FindExternalEvaluators, RegisterExternalEvaluator, StartExternalSession, UnregisterExternalEvaluator

Initialization (10)


EvaluationEnvironment, InitializationObjects, InitializationValue, Initialize, LocalSubmit, ValuePreprocessingFunction, $Initialization, $InitializationContexts, $NoValue, $PreInitialization

Legend (10)


BarLegend, LegendFunction, LegendLabel, LegendLayout, LegendMargins, LegendMarkers, LegendMarkerSize, LineLegend, PointLegend, SwatchLegend

Number Field (10)


Extension, NumberFieldClassNumber, NumberFieldDiscriminant, NumberFieldFundamentalUnits, NumberFieldIntegralBasis, NumberFieldNormRepresentatives, NumberFieldRegulator, NumberFieldRootsOfUnity, NumberFieldSignature, ToNumberField

Optimization (10)


ConicOptimization, LinearFractionalOptimization, LinearOptimization, QuadraticOptimization, SecondOrderConeOptimization, SemidefiniteOptimization, VectorGreater, VectorGreaterEqual, VectorLess, VectorLessEqual

Task (10)


SessionSubmit, TaskAbort, TaskExecute, TaskObject, TaskRemove, TaskResume, Tasks, TaskSuspend, TaskWait, $CurrentTask

Ask (9)


Ask, AskAppend, AskConfirm, AskDisplay, AskedQ, AskedValue, AskFunction, AskState, AskTemplateDisplay

Code Flow (9)


Break, Continue, Goto, Label, LengthWhile, Once, Reap, Scan, Sow

Expression Testing (9)


Between, DuplicateFreeQ, EqualTo, GreaterEqualThan, GreaterThan, LessEqualThan, LessThan, Unequal, UnequalTo

Font (9)


FontColor, FontFamily, FontSize, FontSlant, FontSubstitutions, FontTracking, FontVariations, FontWeight, $FontFamilies

Fractal (9)


CantorStaircase, EscapeRadius, JuliaSetBoettcher, JuliaSetIterationCount, JuliaSetPoints, MandelbrotSetBoettcher, MandelbrotSetDistance, MandelbrotSetIterationCount, MandelbrotSetMemberQ

Grammar (9)


AllowLooseGrammar, AnyOrder, FixedOrder, GrammarApply, GrammarRules, GrammarToken, IgnoreDiacritics, NoWhitespace, OptionalElement

Persistent Object (9)


ExpirationDate, MergingFunction, PersistenceLocation, PersistenceTime, PersistentObject, PersistentObjects, PersistentValue, $PersistenceBase, $PersistencePath

Dataset (8)


Dataset, DeleteMissing, FailureAction, Missing, MissingBehavior, MissingQ, PartBehavior, Query

Expression Size (8)


ByteCount, Count, CountDistinct, CountDistinctBy, Counts, CountsBy, Entropy, LeafCount

Formatting (8)


DisableFormatting, Framed, Labeled, Legended, Multicolumn, Pane, Panel, TextGrid

Graph Distribution (8)


BarabasiAlbertGraphDistribution, BernoulliGraphDistribution, DegreeGraphDistribution, GraphPropertyDistribution, PriceGraphDistribution, SpatialGraphDistribution, UniformGraphDistribution, WattsStrogatzGraphDistribution

Page (8)


GroupPageBreakWithin, PageBreakAbove, PageBreakBelow, PageBreakWithin, PageFooters, PageHeaders, PageWidth, ShowPageBreaks

Web Session (8)


StartWebSession, WebElementObject, WebExecute, WebImage, WebSessionObject, WebSessions, WebWindowObject, $CurrentWebSession

Databin (7)


CopyDatabin, CreateDatabin, Databin, DatabinAdd, DatabinRemove, Databins, DatabinUpload

Interpolation (7)


FunctionInterpolation, InterpolatingFunction, InterpolatingPolynomial, Interpolation, InterpolationOrder, InterpolationPoints, ListInterpolation

Number (7)


Negative, NonNegative, NonPositive, NumericalOrder, NumericalSort, Positive, PossibleZeroQ

Quantity Variable (7)


ExcludedPhysicalQuantities, QuantityVariable, QuantityVariableCanonicalUnit, QuantityVariableDimensions, QuantityVariableIdentifier, QuantityVariablePhysicalQuantity, RequiredPhysicalQuantities

Series (7)


ComposeSeries, InverseSeries, O, PadeApproximant, Series, SeriesCoefficient, SeriesData

Symbol Value (7)


DownValues, FullDefinition, Information, OwnValues, SyntaxInformation, UpValues, ValueQ

Viewer (7)


FlipView, GalleryView, OpenerView, Pagination, PopupView, SlideView, TabView

Wolfram Alpha (7)


Asynchronous, ExcludePods, IncludePods, InputAssumptions, PodStates, PodWidth, WolframAlpha

Controller (6)


ControllerInformation, ControllerLinking, ControllerManipulate, ControllerMethod, ControllerPath, ControllerState

Local Object (6)


LocalObject, LocalObjects, LocalSymbol, $DefaultLocalBase, $LocalBase, $LocalSymbolBase

Numeric Constant (6)


Catalan, EulerGamma, Glaisher, GoldenAngle, GoldenRatio, Khinchin

Slider (6)


ColorSlider, IntervalSlider, MinIntervalSize, Slider, Slider2D, VerticalSlider

Test (6)


TestID, TestReport, TestReportObject, TestResultObject, VerificationTest, $TestFileName

Text String (6)


BooleanStrings, ElidedForms, ListFormat, MissingString, TextString, TimeFormat

Travel (6)


TravelDirections, TravelDirectionsData, TravelDistance, TravelDistanceList, TravelMethod, TravelTime

Continued Fraction (5)


ContinuedFraction, ContinuedFractionK, Convergents, FromContinuedFraction, QuadraticIrrationalQ

Infinity (5)


ComplexInfinity, DirectedInfinity, Indeterminate, Overflow, Underflow

Menu (5)


DefaultMenuStyle, MenuCommandKey, MenuSortingValue, MenuStyle, MenuView

Package (5)


BeginPackage, DeclarePackage, EndPackage, Needs, $Packages

Raw Expression (5)


Hash, NumericArray, NumericArrayQ, NumericArrayType, RawData

Set (5)


AnySubset, DisjointQ, IntersectingQ, SameTest, SubsetQ

Symbol Context (5)


Begin, Context, End, $Context, $ContextPath

Uncertainty (5)


Around, AroundReplace, ComputeUncertainty, MeanAround, VectorAround

Function (4)


ComposeList, Construct, Curry, InverseFunction

Real (4)


MantissaExponent, Rationalize, RealExponent, Reals

Rule (4)


Dispatch, ReplaceList, ReplaceRepeated, TwoWayRule

Scheduled Task (4)


ContinuousTask, IncludeGeneratorTasks, RestartInterval, ScheduledTask

Angle (3)


DMSList, DMSString, FromDMS

Asynchronous Task (3)


HandlerFunctions, HandlerFunctionsKeys, NotificationFunction

Complex (3)


AbsArg, Complexes, ReIm

Front End Execution (3)


FrontEndExecute, FrontEndToken, FrontEndTokenExecute

Interval (3)


IntervalIntersection, IntervalMemberQ, IntervalUnion

Special (3)


After, Before, Full

(3)


Remove, SymbolName, Unique

Autocomplete (2)


Autocomplete, AutocompletionFunction

(2)


AlternateImage, CDFDeploy

Global Options (2)


FindSettings, Language

Palette (2)


CreatePalette, PaletteNotebook

Rational (2)


MixedFractionParts, NumeratorDenominator

Module (1)


BlockRandom

Option (1)


AbsoluteOptions


  • Огромные встроенные базы данных и наборы алгоритмов: Entity (доступ к встроенным данным по самым разным областям: от фильмов до аэропортов и музыки), репозиторий данных (Wolfram Data Repository), репозиторий нейронных сетей (Wolfram Neural Net Repository), репозиторий готовых функций от пользователей (Wolfram Function Repository) и многое другое.
  • Высокая степень интеграции компонент. Возможность использовать совершенно разные области знаний совместно, для решения одной сложной задачи. Вы можете почитать мои статьи и переводы, чтобы убедиться в этом.
  • Сверх-быстрый цикл разработки: создание и внедрение сложного приложения реально сделать (часто) за день, для рельно очень сложных задач — за неделю. Посмотрите записи выступлений:
    Разработка больших приложений в Mathematica | Леонид Шифрин | Конференция Wolfram Технологии 2014

    Роман Осипов | Решение срочных разноплановых задач с помощью Wolfram Language

    Осипов Роман | Разработка практических приложений на основе Wolfram технологий
  • Простое создание облачных сервисов за считанные минуты — API, формы ввода, хранилища данных, сайты, интерактивы. Все это делается из любой системы, в которой работает Wolfram Language. Все объекты можно использовать как непосредственно, так и встраивая их в свой сайт. Подробнее можно посмотреть в видео:
    Подробный обзор Wolfram Programming Cloud
    (видео устарело, Wolfram Cloud сейчас намного круче, в чем вы можете убедиться лично — в скором времени я планирую рассказать о нем подробнее).
  • Короткий и выразительный код. Код в Wolfram Language по сути самый короткий среди языков программирования — см. статью "Розеттский код: измеряем длину кода в огромном количестве языков программирования, изучаем близость языков между собой".
  • Символьная парадигма, которая дает возможность решать задачи и разрабатывать код на высоком уровне абстракции. При этом язык Wolfram Language — что называется «Problem-oriented» — на нем можно программировать буквально «как думаешь», в парадигме, естественной для решаемой задачи. Подробнее см. запись
    Символьные возможности языка Wolfram | Роман Осипов | Конференция Wolfram Технологии 2014
  • Очень высокая степень интерактивности и визуализации результатов. Тут важно отметить, что можно налету создавать динамические объекты (Manipulate, Dynamic, DynamicModule, EventHandler) или вычислять все непосредственно в документе, а сам документ при этом по сути представляет собой интерактивную книгу (эта статья, как я отмечал выше, тоже создана непосредственно в главном средстве разработки на языке Wolfram Language — системе Mathematica).
  • Поддержка современных парадигм программирования:
    • процедурное программирование — как в Fortran, C, Matlab;
    • функциональное программирование — как в Lisp, Haskell, Ocaml/F#, Scala, Clojure;
    • логическое программирование — как в Prolog;
    • программирование на массивах и структурных операциях — как в APL, Matlab;
    • объектно-ориентированное программирование — доступно пока в виде отдельного расширения.

Вспомогательные конструкции
ClearAll[timing];

SetAttributes[timing, HoldAll];

timing[expr_]:=(ClearSystemCache[];

AbsoluteTiming[expr]);

ClearAll[compareTiming];

SetAttributes[compareTiming, HoldAll];

compareTiming[expr_List, OptionsPattern[{"OrderQ"->True}]]:=Module[{t, v, c1, c2, holdExpr, colorF, order, rescale}, 
colorF=Blend[{ColorSwatchGraphicsFontCapHeightRGBColor[19255, 167255, 107255]DeployedRGBColorValueSelectorClosingActionsSelectionDepartureParentChangedEvaluatorQuitPreemptive, ColorSwatchGraphicsFontCapHeightRGBColor[1, 101255, 47255]DeployedRGBColorValueSelectorClosingActionsSelectionDepartureParentChangedEvaluatorQuitPreemptive}, #]&;

holdExpr=ReleaseHold@Map[HoldForm, HoldForm@expr, {2}];

{t, v}=Transpose[timing[ReleaseHold[#]]&/@holdExpr];

order=If[OptionValue["OrderQ"], Reverse[Ordering[t]], Range[1, Length[expr]]];

t=t[[order]];

rescale=Evaluate[Rescale[#, MinMax[t], {0, 1}]]&;

v=v[[order]];

holdExpr=holdExpr[[order]];

If[Length[DeleteDuplicates[v]]>1, Echo["Возможно неодинаковый результат работы программ"]];

Framed[Grid[{{Style[#, Bold]&@"Сравнение скорости работы программ на языке Wolfram Language"}, 
{Grid[{{"Код", "Время,  с"}}~Join~Table[{Style[holdExpr[[ind]], "Input", Background->Transparent], t[[ind]]}, {ind, 1, Length[expr]}], Alignment->{{Left, Center}, {Center, Center}}, Dividers->White, Background->{None, {LightGray}~Join~(colorF@*rescale/@t)}, ItemSize->{{30, 8}, Automatic}]}, 
If[Length[expr]==2, {Row[{"Код ускорен в ", Style[Round[Max[t]/Min[t], 1/100]//N, Bold], " раз"}]}, {Row[{"Максимальное ускорение кода ", Style[Round[Max[t]/Min[t], 1/100]//N, Bold], " раз"}]}], 
{Graphics[
Table[{Opacity[0.6], colorF@*rescale@t[[ind]], Rectangle[{0, 1-ind-0.2(ind-1)}, {t[[ind]], 2-ind-0.2(ind-1)}]}, {ind, 1, Length[expr]}], 
ImageSize->{500, Automatic}, PlotRange->{{0, Max[t]}, {1.2(1-Length[expr]), 1}}, AspectRatio->1/(9-Length[expr]/2), 
Axes->False, Ticks->{Automatic, None}, FrameTicks->{All, None}, 
GridLines->{Automatic, None}, Background->White, PlotRangePadding->0, Frame->True, FrameLabel->{{None, None}, {"Время,  с", None}}]}
}, 
ItemStyle->Directive[FontSize -> 14, FontFamily->"Open Sans Light"]], Background->White, FrameStyle->None]];

Как начать работу? Бесплатно)


Не многие знают, что можно начать работу с движком Wolfram и языком Wolfram Language совершенно бесплатно. Ниже перечислены ключевые варианты:

  • Wolfram Cloudбесплатный план (все функции доступны, ограничения только на время вычислений и запросы к базам данных).
  • Wolfram Programming Lab — бесплатная лаборатория программирования Wolfram для изучения языка Wolfram Language. Подробнее см. перевод на Хабре.
  • Wolfram Engine — бесплатная библиотека для разработчиков программного обеспечения. Подробнее см. перевод на Хабре.
  • Raspberry Pi — система Mathematica поставляется бесплатно на каждой версии этого замечательного компьютера. Подробнее...

P.S.


На моем канале YouTube есть две важные рубрики: "КиЯ — Коротко и Ясно" (выходят ежедневно) и Вебинары (еженедельно). Подписывайтесь на канал, он будет полезен каждому, кто работает с языком Wolfram Language!



Для сотрудничества — пишите личное сообщение на Хабре или в мою группу ВКонтакте.
Регистрация на новые курсы. Готовый онлайн курс.
Wolfram Research
182.60
Wolfram Language, Mathematica, Wolfram Alpha и др.
Support the author
Share post

Comments 18

    +5

    OsipovRoman, большое спасибо за статью! Она действительно очень полезная и практичная!


    К пункту 1.2


    В этом совете основной посыл состоит в том, что надо использовать функциональную парадигму при необходимости применить функцию к списку. Однако, показанный эффект ускорения достигается совершенно не этим. Дело в том, что в случае с Map[#^2&, data] ускорения достигается благодаря комбинации чистая функция + встроенный цикл + упакованный массив, когда Математика встречает такую конструкцию, то применяет автокомпиляцию, которая и дает ускорение. Соответственно если использовать "шаблонную" функцию + цикл + упакованный массив — автокомпиляция не используется. И в конкретно этом случае применение Map/Table не даст разницы во времени выполнения.



    Также на скриншоте видно, что нет разницы между использование чистой функции в полной записи Function[x, x^2] и в короткой #^2&. Действительно разница во времени вычисления есть при применении любой функции к неупакованному массиву при помощи Map и Table. Table проигрывает в этом случае и это не зависит от того, чистая была функция или шаблонная.


    К пункту 1.4


    На мой взгляд сравнение проведено некорректно. Опять же в заголовке сказано про процедурный стиль, но эффект, который дает такую разницу во времени заключается в другом. Первая операция выполнялась медленно не из-за While, а из-за медленной операции вставки. Так как списки в Математике неизменяемы, то вставка нового элемента всегда происходит с пересозданием списка целиком. Зная это тот же самый код можно переписать вот так:



    Т.е. здесь заранее создается массив на 20000 целых чисел, а затем заполняется. И как теперь видно проблема была не в цикле While. Хотя без сомнения код на скриншоте не самый идеологически хороший. А что касается ускорения во втором случае — здесь была использована рекурсия с мемоизацией. Для человеческого глаза это понятнее, также не создается никаких дополнительных списков, куда надо вставлять значения и ничего не перепутать. Однако этот способ сохраняет все 20000 значений в определении. Поэтому, например, повторный вызов f /@ Range[20000] вообще должен выполнится за нулевое время, но в итоге выполнится за константное время, которое требуется на получение списка значений из памяти:



    Тогда как результат в виде списка чисел Фибоначчи при повторном использовании будет взят из памяти мгновенно, так как это одна переменная, которая ссылается на один большой массив.


    К пункту 3.2


    Здесь мне хочется добавить, что использовать Parallelization -> True и Listable отдельно не имеет никакого смысла. Эти две опции (как показывают эксперименты) дают эффект ускорения только при совместном использовании. Я думаю популярное слово "параллелизация" введет читателей в заблуждение. Она есть, но применяется исключительно при применении к списку аргументов. Соответственно список делится на равные части по числу процессорных ядер и функция вызывается на каждом ядре попеременно для всех элементов. Если передавать один аргумент — этого эффекта не будет. Т.е. вот так cfunc[{1, 2, 3, 4}] — функция вычислит значение на каждом ядре отдельно, а вот так: {cfunc[1], cfunc[2], cfunc[3], cfunc[4]} уже нет. И еще одно замечание: fJITCompiledListable — определение этой функции не соответствует заявленному, потому что в нем по умолчанию будет также Parallelization -> True. Чтобы функция принимала на вход список и к каждому элементу применялась на одном ядре необходимо принудительно указывать False. На скриншоте ниже показано, что использование двух опций отдельно эквивалентно их отсутствию, если оценивать по скорости. И только комбинация опций дает ускорение в число раз равное количеству ядер:



    Еще одним способом ускорить скомпилированную функцию является возможность оптимизации выражений, когда повторяющиеся части выражения вычисляются только один раз. Например в коде ниже это x^2:



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



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


    Needs["Compile`"]
    Compile`CompilerFunctions[]

    Еще одной тема, которой не хватает для полноты картины и раскрытия компиляции в Wolfram Language — это экспериментальные функции в версии Wolfram Language 12.0: FunctionCompile, KernelFunction и связанные с ними. На мой взгляд одним из преимуществ данных функций является возможность более строгого указания типов входных аргументов и типа результата, а также добавлена возможность безболезненно использовать вызов встроенной функции ядра Математики внутри скомпилированной.


    Спасибо всем, кто дочитал этот комментарий и очень надеюсь, что кому-то поможет это небольшое дополнение по теме компиляции выражений в Wolfram Language.

      +1
      Кирилл, спасибо за отличный комментарий! Вы отлично уточнили эти пункты.

      Безусловно все в одну статью невозможно запихнуть, а если углубляться в дебри, то можно написать хороший томик)

      Перед собой я ставил главную цель: продемонстрировать на простых примерах главные краеугольные камни ускорения кода в Wolfram Language. Ведь, как я в статье постарался сфокусировать внимание читателя на том, что медленность Wolfram Language это миф. К сожалению, у нас пока что мало знают об этом языке.

      Отрадно, что вы, очевидно, глубоко в теме)!
        +1
        К сожалению, у нас пока что мало знают об этом языке
        Я бы даже сказал, что WL — самый недооценённый язык на текущий момент, причём за пропаганду Mathematica мне никто ничего не платит))

        Я думаю, что политика продвижения Mathematica и WL не совсем верная. Не нужно упирать на то, насколько он крут и в нём можно сделать всё, что угодно — это вызывает скорее отторжение. Пользователь должен сам осознать и сделать свой выбор без давление извне.

        Противопоставлять Mathematica нужно прежде всего Matlab-у и Mathcad-у — это наиболее популярные инструменты для прототипирования и символьных расчётов. Я сам пришёл к Mathematica тогда, когда Mathcad не смог решить какое-то уравнение, и поначалу было непросто приспособиться к новому синтаксису. Но когда приспособился, он вдохновил меня настолько, что я решил разориться на лицензионную версию — не для работы, а для личного пользования, и если сравнивать с Matlab-ом — цена действительно смешная.

        Продвигать Mathematica нужно (как мне кажется) не для уже сформировавшихся разработчиков, а для школьников и студентов, у которых всё ещё впереди. Чтобы он привык в любой непонятной ситуации открывать Mathematica или документацию к Mathematica (которой тоже нету равных по содержательности).
          0
          Я бы даже сказал, что WL — самый недооценённый язык на текущий момент, причём за пропаганду Mathematica мне никто ничего не платит))

          Целиком согласен. Регулярно говорю об этом и требуется подчас потратить немало сил, чтобы убедить заказчика его использовать. Но потом ситуация меняется, когда распробуют)

          Продвигать Mathematica нужно (как мне кажется) не для уже сформировавшихся разработчиков, а для школьников и студентов, у которых всё ещё впереди

          Да, это разумно, безусловно. Как и то, что вы написали на тему Matlab, Maple, к которым я добавил бы еще Maple, скажем, и вещи, типа SymPy.
      –1
      По-моему, тут не хватает самой главной рекомендации — не используйте списки и рекурсию там, где они не нужны явным образом. Использовать списки для рекурсивного нахождения чисел Фибоначчи — это треш, за это нужно бить палкой по голове. Вы можете не знать, что в WL есть встроенная функция для чисел Фибоначчи, но вы обязаны знать, что в WL есть решатель рекуррентных уравнений! Пишите
      RSolve[{f[n + 2] == f[n] + f[n + 1], f[1] == f[2] == 1}, f, n]
      получите ответ
      {{f -> Function[{n}, Fibonacci[n]]}}
      его и используйте. Если вы не знаете, что значит «Fibonacci» — пишите
      Fibonacci[n] // FunctionExpand
      получите формулу в явном виде
      ((1/2 (1 + Sqrt[5]))^n - (2/(1 + Sqrt[5]))^n Cos[Pi n])/Sqrt[5]

      Если вам действительно нужен список из чисел Фибоначчи — не используйте примеры из статьи. Используйте
      Table[Fibonacci[n], {n, 10}]

        0
        По-моему, тут не хватает самой главной рекомендации — не используйте списки и рекурсию там, где они не нужны явным образом. Использовать списки для рекурсивного нахождения чисел Фибоначчи — это треш, за это нужно бить палкой по голове. Вы можете не знать, что в WL есть встроенная функция для чисел Фибоначчи, но вы обязаны знать, что в WL есть решатель рекуррентных уравнений!

        Думаю вы это не мне писали, а сообществу. В противном случае это просто смешно, так как эти функции я давно популяризирую.

        То о чем вы написали — это уже не оптимизация кода. Если удается найти аналитическую зависимость, то ок, счет пойдет мгновенно, это очевидно. Но в большинстве случаев это нереально.

        Рад, что в комментариях это отмечено. На канале у меня скоро выйдут ролики про FindSequenceFunction и RSolve, хотя там много функций, для поиска всяких зависимостей в последовательностях. А решение рекуррентных уравнений — это то, на чем все это базируется.

        Если вам действительно нужен список из чисел Фибоначчи — не используйте примеры из статьи. Используйте
        Table[Fibonacci[n], {n, 10}]

        А вот тут вы жесткоко ошибаетесь. Встроенная функция медленная, весьма. Она может помимо чисел генерировать полиномы Фибоначчи, тут она может помочь. А так представленный способ быстр, причем чем больше нужно чисел, тем в большее число раз.


          +1
          Думаю вы это не мне писали, а сообществу
          Конечно, это я не вам лично писал — это просто комментарий, отражающий некоторые идеи, возможно ошибочные. Как я об этом узнаю, если буду держать их при себе?

          1) «преждевременная оптимизация — корень всех зол» ©. Кто не согласен, пусть первым кинет в меня камень. Наглядность важнее, особенно при прототипировании.

          2) способность WL решать рекуррентные уравнения вообще говоря не очевидна — я сам о ней узнал чисто случайно, и примеры с рекурсивным вычислением факториала этому никак не способствуют.

          3) использовать WL игнорируя всю мощь его символьного движка — это примерно то же самое, что использовать компилятор с++ не используя классы, перегрузку операторов, умные указатели, шаблоны и всё такое. Так и тут возникает закономерный вопрос — а зачем вообще нужен WL, если это всё точно так же реализуется на c/c++/c#/python и наверняка будет работать ещё быстрее?

          А вот тут вы жесткоко ошибаетесь. Встроенная функция медленная, весьма.
          По-моему, это очевидный недостаток языка или его реализации конкретной версии — учитывая, что сам Леонид Шифрин постоянно твердит «используйте встроенные функции, если они есть, и не изобретайте велосипеды», да и вы здесь же пишете «используйте функциональное программирование». Если у нас рекуррентная последовательность определена как функция — мы можем использовать её в качестве аргумента, интегрировать/дифференцировать, делать подстановки и всё такое.
            0
            1) «преждевременная оптимизация — корень всех зол» ©. Кто не согласен, пусть первым кинет в меня камень. Наглядность важнее, особенно при прототипировании.

            И да и нет. Смотрите: когда я руководил на протяжении почти 3 лет разработкой очень большого продукта образовательного (издательство Баласс) регулярно приходилось искать компромисс между качеством и скоростью: часто разработчики хотят сделать круто, и это очень ценно. Но часто решение нужно уже сегодня, как говорится. Поэтому приходится часто откидывать «оптимизацию» и её продумывание до рефакторинга, потому что тратить время и деньги сейчас нецелесообразно.

            Проблема в том, что оптимизация может съесть больше времени, чем будет от нее выхлоп. Если речь идет о решении, использующемся здесь и сейчас — то нет смысла особенно морочиться и оптимизировать его. Напротив — если решение используется постоянно и, тем более, очень многими людьми — то чем больше в начале продумаешь и оптимизируешь, тем лучше.

            2) способность WL решать рекуррентные уравнения вообще говоря не очевидна — я сам о ней узнал чисто случайно, и примеры с рекурсивным вычислением факториала этому никак не способствуют.

            Да, как и многие вещи, поэтому нужно больше листать справку)))

            По-моему, это очевидный недостаток языка или его реализации конкретной версии — учитывая, что сам Леонид Шифрин постоянно твердит «используйте встроенные функции, если они есть, и не изобретайте велосипеды».....

            Да, все так, но как говорится — у каждого правила есть исключение.

            Вам когда нибудь нужно было хотя бы 100 чисел Фибоначчи? Мне пока нет.

            Так что для 99,(сколько-то девяток)% пользователей встроенной функции хватит, как и производительности). А тем, кому нужен триллион этих чисел — можно использовать другой алгоритм или поморочиться и получить формулу)
              +1
              У меня, кстати, есть один интересный пример оптимизации исключительно на символьном движке и реальной, а не гипотетической задачи. Она упоминается вскольз в статье, которая сейчас в разработке, но возможно, стоит её выделить и рассмотреть отдельно? Правда, тогда интрига из статьи пропадёт.
                0
                Можете мне скинуть, обещаю сохранить авторское право и тайну)))
                  +2
                  Там если всё подробно расписывать, на полноценную статью потянет) А вкратце примерно так:

                  Имеется некоторая кусочно-непрерывная функция, которая интегрируется, масштабируется, и суммируется сама с собой со сдвигом по оси абсцисс, величина которого задаётся параметром. От результата необходимо посчитать символьное преобразование Фурье — вот его-то мне дождаться и не удалось даже спустя несколько часов.

                  Оптимизация заключается в том, что преобразование Фурье мы делаем сразу, интегрирование заменяется делением на i ω, смещение — умножением на комплексную экспоненту, сложение остаётся сложением, масштабирование пересчитывается (разово) через решение системы уравнений. В итоге на всё про всё, включая упрощение (куда же без него) тратится лишь несколько секунд.
                    0
                    Вспомнил про ещё одну оптимизацию, которую делал — свёртки, когда заранее известно, что сворачиваемые функции состоят из суммы косинусов, ограниченных прямоугольной функцией. Посчитал сначала свёртку для двух косинусов с произвольными множителями, нашёл пределы для граничных случаев, приводящих к обнулению знаменателя и выделил это всё в отдельную функцию. Минуты ожидания сменились на секунды.

                      +1
                      Да, это круто!
                      Просто это такая, назовем её, "научная оптимизация".
                      Это безусловно круто, если так получается, но очевидно это требует много таланта.
                      Статья же посвящена больше приемам оптимизации, которые будут работать независимо от того, насколько круто программист умеет что-то упрощать с точки зрения теории и науки.
                      В целом я описал свой взгляд уже выше)
              +1
              Я только сейчас заметил, что неудачно выбрал форму для обезличенного обращения и тот комментарий прозвучал намного грубее, чем в него закладывалось) Прошу прощения.
                +1
                Да ничего страшного)
                0
                Да, хочу заметить, что встроенная функция LinearRecurrence отлично справляется с рекуррентными последовательностями.

                Последовательность Фибоначчи в ней будет задаваться как:

                LinearRecurrence[{1, 1}, {1, 1}, n]


                Эта конструкция еще примерно в 2 раза быстрее чем та, что основана на мемоизации. Особенно, если использовать приближенные начальные значения и потом их перевести в целые:

                LinearRecurrence[{1, 1}, N@{1, 1}, n]
                  0
                  Теперь нюансы — так, как они видятся лично мне.

                  1) с плавающей точкой (машинной точности) с последующим округлением точно можно вычислить только первые 71 значений — затем разрядности перестанет хватать. Это неочевидное и не интуитивное ограничение — лично мне казалось, что несколько сотен уж точно в double должно поместиться.

                  2) условия задачи изменились и нужно вычислять не каждое значение последовательности — а через раз, два, n или с простым порядковым номером. Как для этого модифицировать параметры LinearRecurrence — непонятно.

                  3) нужно решить обратную задачу — найти порядковый номер элемента через его значение, заданным с некоторой погрешностью — скажем, 100000. Сделать это без аналитической функции в разы сложнее.
                    0
                    Вы говорите о преимуществах точной зависимости — они, конечно, бесспорны. Особенно если зависимость проста.

                    Когда я занимался математической физикой — там часто появлялись аналитические зависимости, которые для численного счета можно было выкинуть в топку — ряды от несобственных интегралов, скажем, которые аналитически берутся в свою очередь в ряды…

                    Конечно для решения того, о чем вы пишите аналитическая зависимость прекрасна, я по-моему с этим и не спорю, а подтверждаю.

                    Другое дело, что она откровенно не всегда нужна и я бы не советовал всегда все сводить к поиску аналитической зависимости. Как только отойдешь от чистой математики в сторону обработки реальных данных, выяснится, что аналитически там ни одну зависимость не продлить и нужны уже совсем другие методы.

            Only users with full accounts can post comments. Log in, please.