– Выражение просматривается слева направо.
– Любые короткие векторные операнды расширяются циклически их значениями, пока они не совпадет с размером любых других операндов.
– Если длинные и короткие вектора с массивами лишь пересчитываются, то все массивы должны иметь одинаковый атрибут dim или будет выдана ошибка.
– Любой векторный операнд более длинный, чем операнд матрицы или массива, генерирует ошибку.
– Если имеются структуры массива, и нет ошибок, или приведение к вектору было выполнено, то результат – структура массива с общим атрибутом dim ее операндов массива.
5.5. Внешнее произведение двух массивов
Важной операуцией на массивах является внешнее произведение. Если a и b – два числовых массива, их внешнее произведение – массив, вектор размерности которого получен, связывая их два вектора размерности (порядок важен), и чей вектор данных получен путем формирования всех возможных произведений элементов вектора а с соответствующим элементами вектора b. Внешнее произведение выполняется специальным оператором %o%:
Альтернатива
Функция умножения может быть заменена произвольной функцией двух переменных. Например, если необходимо оценить функцию f (x; y) = cos (y) / (1 + x>2) на регулярной сетке значения с x-и y-координатами, определенными векторами R x и y соответственно, можно продолжить следующим образом:
Особенностью внешнего произведения двух обычных векторов является вдвойне преобразованный в нижний индекс массив (который является матрицей ранга самое большее 1). Заметьте, что оператор внешнего произведения, конечно, некоммутативен. Определение Ваших собственных функций R рассмотрим далее в Главе 10 [написание собственных функций].
Пример: детерминанты с одноразрядными матрицами 2*2
В качестве искусственного, но милого примера, рассмотрим детерминанты матриц [a; b; c; d], где каждый вход – неотрицательное целое число в диапазоне 0; 1;..; 9, которые являются цифрой.
Задача состоит в том, чтобы найти детерминанты ad-bc всех возможных матриц этой формы и представлять частоту, с которой каждое значение имеет место в рисунке высокой плотности. Это количество находится в распределении вероятностей детерминанта, если каждая цифра выбрана независимо и гарантировано случайно.
Аккуратный способ сделать это состоит в двукратном использовании функции outer ():
Заметьте, что здесь plot () использует гистограмму как метод рисунка, потому что он «видит», что fr имеет класс «таблица». «Очевидный» способ решить эту задачу с циклом for обсуждается в Главе 9 [Циклы и условное выполнение], что является как неэффективным, так и непрактичным.
Также, возможно, удивительно, что приблизительно 1 из 20 матриц сингулярная.
5.6. Обобщенное транспонирование массива
Можно использовать функцию aperm (a, perm) для перестановки массива a. Параметром perm должна быть перестановка целых чисел {1, …., к}, где k является номером нижних индексов в a. Результат функции – массив того же самого размера как a, но со старой размерностью, вычисленной perm [j], становящейся новой j-й размерностью. Самый простой способ понимания этой операции – это обобщение транспонирования для матриц. Действительно, если A – матрица, (то есть, вдвойне преобразованный в нижний индекс массив) тогда B вычисляется путем:
и представляет собой транспонирование. Для этого особого случая доступна более простая функция