Jump to content

Ранг (язык программирования J)

Ранг — это обобщение цикла , используемого в скалярных (не ориентированных на массивы ) языках программирования . [1] [2] Это также обобщение Mapcar на языке Lisp. [3] и отображение в современных языках функционального программирования , а также обобщение скалярного расширения, внутреннего ( матричного ) произведения и внешнего произведения в APL\360. Канонической реализацией ранга может быть язык J , но он также доступен в Dyalog APL , Международной организации по стандартизации (ISO) техническом стандарте для расширенного APL и NARS2000.

Ранг имеет несколько разных значений. В общем, концепция ранга используется для рассмотрения ортогонального массива с точки зрения его подмассивов. [4] Например, двумерный массив можно рассматривать на уровне 2 как на всю матрицу, или на уровне 1, чтобы работать с его неявными одномерными столбцами или строками, или на уровне 0, чтобы работать на уровне его отдельных атомов.

  • Ранг существительного . Ранг существительного представляет собой неотрицательное целое число .
  • Ранг глагола . Ранг глагола представляет собой список из трех целых чисел.
  • Ранговый союз – Ранговый союз ( ") используется для получения глагола определенного ранга.

Ранг как обобщение цикла

[ редактировать ]

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

   +/ 1 2 3
6

Результат 1 + 2 + 3, как и ожидалось.

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

   i. 3
0 1 2

   i. 2 3
0 1 2
3 4 5

   i. 2 3 4
 0  1  2  3
 4  5  6  7
 8  9 10 11

12 13 14 15
16 17 18 19
20 21 22 23

Теперь сократим двумерный массив сложением.

   +/ i. 2 3
3 5 7

Результат 0 1 2 + 3 4 5, как и ожидалось. Сокращение выполняется по каждому столбцу, складывая все числа в этом столбце.

Это приложение +/ двумерному массиву соответствует фрагмент кода C: [5]

for(j = 0; j < 3; ++j) {
    sum[j] = 0;
}
for(i = 0; i < 2; ++i) {
    for(j = 0; j < 3; ++j) {
        sum[j] += array[i][j];
    }
}

Предположим, мы хотим сложить элементы каждой строки, как во фрагменте кода C:

for(i = 0; i < 2; ++i) {
    sum[i] = 0;
    for(j = 0; j < 3; ++j) {
        sum[i] += array[i][j];
    }
}

Чтобы получить результат 3 12. Мы можем сделать это в J без цикла, просто используя Rank.

   +/"1 i. 2 3
3 12

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

   +/"2 i. 2 3
3 5 7

Обычно массивы меньшей размерности называют этими именами: [6] хотя иногда они оспариваются. [7]

Имя Классифицировать
Атом или скаляр 0
Вектор или список 1
Таблица или матрица 2
Тензор или куб 3

Ранг существительного

[ редактировать ]

Существительные в J представляют собой массивы . Ранг существительного — это количество измерений этого массива. Производное глагол #@$ определяет ранг существительного.

глагол ранг

[ редактировать ]

Глаголы в языке J — это функции, которые принимают аргументы-существительные и выдают результаты-существительные. Ранг глагола определяет, как глагол применяется к существительным с рангом больше 0. Этот ранг глагола выражается тремя числами:

  1. Ранг для случая монады; например, −y использует как монада
  2. Ранг левого аргумента в случае диады; например, x−y использует как диада
  3. Ранжирование правильного аргумента в случае диады

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

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

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

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

В диадическом случае имеется два кадра: один для левого аргумента и один для правого аргумента. Эти рамки должны согласовываться. Если кадры не идентичны, один из них должен быть префиксом другого; например (i. 2 3) *"0 1 i. 2 3 4 умножает каждый скаляр (нульмерный элемент) слева на каждый вектор (одномерный элемент) справа. Результат вычисления этого глагола будет иметь размеры самого длинного кадра в качестве размеров префикса его результата. Конечные измерения результата, если таковые имеются, будут результатом применения глагола к соответствующим ячейкам. В вырожденных случаях, когда аргументы не имеют достаточной размерности, ранг глагола эффективно снижается (что может повлиять на его результат).

Например,

   10 + 4 5 6
 14 15 16

Здесь глагол + имеет ранг 0 0 0, левый аргумент имеет ранг 0, а правый аргумент имеет ранг 1 (с размерностью 3). Таким образом, левый аргумент имеет фрейм ранга 0, а правый аргумент имеет фрейм ранга 1 (с размерностью 3). (Пустой) кадр левого аргумента является допустимым суффиксом для кадра правого аргумента, поэтому это допустимая операция. Результат имеет ранг 1 и размерность 3.

Ранговое соединение

[ редактировать ]

Союз ранга принимает левый аргумент глагола и правый аргумент существительного для создания нового глагола. Аргумент существительного «правый» состоит из трех чисел, определяющих монадический ранг, диадический левый ранг и диадический правый ранг соответственно. [8]

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

   1 2 3 +"1 1 i. 3 3
1 3  5
4 6  8
7 9 11

Если вместо этого мы хотим добавить каждый скаляр слева к каждому вектору справа, мы бы сделали это следующим образом:

   1 2 3 +"0 1 i. 3 3
1  2  3
5  6  7
9 10 11

Если правым аргументом является только одно число, оно принимается за ранг для всех трех случаев.

Если правым аргументом является глагол, используется его ранг. Например, все они являются производными от одного и того же глагола:

  • +"0 0 0
  • +"0 0
  • +"0
  • +"+

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

  1. ^ Слепак, Джастин; Шиверс, Олин; Манолиос, Панайотис. «Язык, ориентированный на массивы, со статическим полиморфизмом ранга» (PDF) .
  2. ^ «Безциклический код I: глаголы имеют ранг» . Jпрограммное обеспечение .
  3. ^ «Функция Mapcar» . Фонд свободного программного обеспечения .
  4. ^ Бернеки, Р. (декабрь 1987 г.). «Введение в функциональный ранг» . Материалы конференции APL88, APL Quote Quad . Том. 18.
  5. ^ «Управление выполнением глагола путем указания ранга» . Jпрограммное обеспечение .
  6. ^ Рабансер, Стефан; Щур, Александр; Гюннеманн, Стефан (29 ноября 2017 г.). «Введение в тензорные разложения и их применение в машинном обучении». arXiv : 1711.10781 [ stat.ML ].
  7. ^ кгвгк; набла9; азаг0; том; радарсат1 (24 апреля 2017 г.). «HPTT: высокопроизводительная тензорная транспозиция C++» . Хакерские новости . Y Комбинатор . Проверено 10 декабря 2019 г. {{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  8. ^ Берк, Крис (12 сентября 2014 г.). «Очерки: Ранг» . Jпрограммное обеспечение .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: e8c50834ec4c213ebcc8786fbf366ded__1683085860
URL1:https://arc.ask3.ru/arc/aa/e8/ed/e8c50834ec4c213ebcc8786fbf366ded.html
Заголовок, (Title) документа по адресу, URL1:
Rank (J programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)