Функции обработки массивов

Функции манипуляций с индексами массивов

akeys(a) - возвращает массив индексов элементов массива a. Индексами полученного массива являются натуральные числа, начиная с нуля.
avals(a) - возвращает массив значений элементов массива a. Индексами полученного массива являются натуральные числа, начиная с нуля.
Далее, массивы, индексы первого измерения которых являются последовательными натуральными числами, начинающимися с нуля, будут именоваться массивами с естественной индексацией.
acomb(keys,values) - возвращает массив, индексами которого являются элемента массива keys, а значениями - соответствующие значения массива values. Параметры keys и values должны быть массивами с естественной индексацией.
acheck(a) - возвращает 1, если a - массив с естественной индексацией и все его элементы - числа. В противном случае возвращает 0.
mckeys(m) - возвращает массив всех индексов столбцов матрицы m. Использование актуально для разреженных матриц, в части строк которых определены значения не для всех столбцов.

Создание и преобразование векторов и матриц

ainit(start,step,count) - возвращает массив из count элементов, первый из которых равен start, а последующие образуются приростом предыдущего на величину step.
array(p1,p2,...,pN) - возвращает массив, в который параметры переносятся по следующим правилам. Если pi строка, то она рассматривается как последовательность слов, разделенных пробелами: w1 w2 ... wK. Каждое такое слово становится следующим элементом массива. При этом, если в слове имеется символ "двоеточие" (:), то последовательность символов до двоеточия становится индексом данного элемента, а последовательность символов после двоеточия - его значением. Если символ двоеточия в слове отсутствует, то в качестве индекса принимается очередное целое число.
apush(a,x,n) - если n>0, то значение x добавляется в конец массива. Если n=0, то элемент добавляется в начало массива, а все остальные элементы сдвигаются вправо. Все числовые ключи будут изменены таким образом, что нумерация массива будет начинаться с нуля, в то время как строковые ключи останутся прежними. По умолчанию n=0.
atos(s,a) - возвращает строку, полученную объединением строковых представлений элементов массива a, со вставкой строки s между соседними элементами.
stoa(d,s) - возвращает массив строк, полученных разбиением строки s с использованием d в качестве разделителя.
auniq(a) - возвращает массив a без повторяющихся значений. Индексы элементов, которые остались в массиве, остаются без изменений.
adiff(a1,a2) - возвращает массив, состоящий из значений массива a1, которые отсутствуют в массиве a2. Индексы сохраняются.
asame(a1,a2) - возвращает массив, содержащий значения массива a1, которые содержатся в массиве a2. Индексы сохраняются.
ajoin(a,b) - объединение массива a и массива b. Присоединяет правый массив к массиву, размещенному слева НЕ перезаписывая элементы с дублирующимися ключами. То есть, если b содержит элементы с такими же индексами, как a, то в результирующий массив попадут только соответствующие элементы из a.
aslice(array,offset,length) - возвращает последовательность элементов массива array, которая начинается на расстоянии offset от его начала и включает length элементов. Если length не задан, в последовательность войдут все элементы исходного массива array, начиная с позиции offset. Функция изменяет ключи массива.
aln(a) - возвращает массив, все элементы которого являются натуральными логарифмами исходных элементов. Если какое-либо значение не может быть прологарифмировано - возвращает %null.
ftab(expr,var,start,step,n) - возвращает массив, содержащий n значений функции, заданной выражением expr относительно переменной, имя которой задано в var, начиная со значения аргумента start с шагом step.
fcalc(expr,var,data) - возвращает массив значений, вычисленных выражением expr, для каждого значения массива data. Выражение в строке expr должно быть построено по правилам формирования выражений, принятом во встроенном языке и должно оперировать переменной с именем, записанном в параметре var функции fcalc.
Например, имеется следующий программный код:
r=fcalc("10+2*x","x","1 2 3 4 5")
vprint(r,1)
Результатом его выполнения будет:
0
1
2
3
4
12
14
16
18
20
minit(rows,cols,value) - создает матрицу, руководствуясь параметрами rows,cols,value. Если rows - число, в у матрицы будет rows строк, индексами которых являются числа от нуля до rows-1. Если rows - массив, то у матрицы будет число строк равное числу элементов данного массива, а индексами строк - элементы этого массива. Если rows - строка символов, то она будет преобразована в массив, элементами которого будут слова строки разделенные пробелами. Если cols - число, в у матрицы будет cols столбцов, индексами которых являются числа от нуля до cols-1. Если cols - массив, то у матрицы будет число столбцов равное числу элементов данного массива, а индексами столбцов - элементы этого массива. Если cols - строка символов, то она будет преобразована в массив, элементами которого будут слова строки разделенные пробелами. Элементы матрицы будут заполнены значениями value. По умолчанию value=%null.
mread(m) - выводит форму для редактирования значений матрицы в табличной форме. В первой строке отображаются индексы столбцов, в первом столбце - индексы строк. Внутри - поля ввода новых значений элементов матрицы. Обработчик формы и кнопки ввода должны устанавливаться программой отдельно.
mform(m) - базовая часть mread(). Выводит заголовки столбцов, индексы строк и тело матрицы без вывода HTML-кода начала и конца таблицы. Может использоваться, когда в таблицу нужно включить дополнительные строки до заголовка столбцов или в подножие.
msave(matrix,name) - сохраняет матрицу matrix под именем name в таблице постоянных переменных.
mtrans(m) - возвращает результат транспонирования матрицы m. Исходная матрица не изменяется.
mkfill(m,u) - возвращает матрицу, у которой все неопределенные значения заполнены скаляром u.
mcget(m,n) - возвращает столбец n матрицы m.
mcput(a,b,k) - вставляет в столбец k матрицы a элементы вектора b. Вставка производится в соответствии с индексами вектора b. Если строки с таким индексом в матрице a не было, то она создается. При этом элементы вне столбца k не определяются (при обращении равны %null). Если такая строка есть и в столбце k уже был элемент, то он замещается новым значением.
mrcopy - пока не использовать
mccopy(a,c) - возвращает матрицу, содержащую все столбцы матрицы a, индексы которых содержатся в массиве c. Параметр c может быть строкой символов, которая преобразуется в массив, элементами которого становятся отдельные слова данной строки (последовательности символов, разделенные пробелами).
mncopy(a) - возвращает матрицу, содержащую те строки матрицы a, в которых все элементы - числа.
mxcopy(a,x) - возвращает матрицу, все строки которой построены модулем x. Каждая строка матрицы a передается модулю x. Если х возвращает массив, то он становится строкой результатной матрицы.
micopy(a) - преобразует матрицу a в матрицу с естественной индексацией (строки и столбцы имеют индексами целые числа, начиная с нуля).
mxmark(data,col,param,name) - возвращает матрицу data, отсортированную по убыванию значений в столбце col, к которой добавлен столбец с именем name, значениями которого является номер группы, к которой отнесена строка по результатам ABC-анализа, проведенного в соответствии со значениями, заданными параметрами, содержащимися в param. Строки матрицы data должны соответствовать классифицируемым объектам, а столбцы - содержать реквизиты, характеризующие каждый объект. Параметр col должен быть индексом столбца data, на основании данных которого производится классификация. Параметр param может быть массивом чисел или строкой, содержащей числа, разделенные пробелами. В последнем случае данные преобразуются в массив. Сумма чисел массива param не должна превышать 100. Заданные числа нарастающим итогом определяет определяют нижнюю границу отнесения строки к конкретной группе. Например, если задана последовательность чисел 50 20 10, то к первой группе будут отнесены строки, сумма значений элементов которых в столбце col не превышает 50% общей суммы значений в столбце col; ко второй группе будут отнесены строки сумма значений элементов которых в столбце col вместе с суммой в первой группе не превышает 70% общей суммы; к третьей группе будут отнесены строки, которые вместе со строками первой и второй группы дают не более 80% общей суммы; к четвертой группе будут отнесены все остальные строки. Поскольку перед началом классификации строки матрицы сортируются по убыванию значения в строке col, то в первую группу попадут строки, имеющие наибольшие значения показателя, определяемого столбцом col, и дающие в совокупности порядка 50% суммы данного показателя; во вторую - те строки, которые дают вклад еще примерно в 20% и т.д.

Расчеты по данным массивов

alen(a) - число элементов первой размерности массива a
arnn(a,n) - если n=1 или не задано, то возвращает случайно выбранный индекс первого измерения массива a. При n>1 возвращает массив из n случайно выбранных индексов массива a.
arnd(a) - возвращает случано выбранный элемент массива a
amax(a) - возвращает максимальное значение в массиве a
amin(a) - возвращает минимальное значение в массиве a
asum(a) - возвращает сумму элементов массива a
aprod(a) - возвращает произведение элементов массива a
acomp(a,b) - сравнение массивов. Возвращает 1, если a и b содержат одни и те же элементы.
aequal(a,b) - точное сравнение массивов. Возвращает 1, если a и b содержат одни и те же элементы в том же самом порядке.
aadd(a1,a2) - поэлементная сумма массивов
asub(a1,a2) - поэлементная разность массивов
amul(a1,a2) - поэлементное произведение массивов
adiv(a1,a2) - поэлементная деление массивов
ascal(a1,a2) - скалярное произведение массивов
acadd(a,с) - прибавить скаляр c ко всем элементам массива a
acmul(a,с) - умножить на скаляр c все элементы массива a
mxadd(m1,m2) - возвращает результат поэлементного сложения матриц m1 и m2. Матрицы могут быть разной размерности. За основу берется матрица m1 и к ее элементам прибавляются элементы матрицы m2, имеющие те же индексы строк и столбцов. Исходные матрицы не изменяются.
mxsub(m1,m2) - возвращает результат поэлементного вычитания матриц m1 и m2. Матрицы могут быть разной размерности. За основу берется матрица m1 и из ее элементов вычитаются элементы матрицы m2, имеющие те же индексы строк и столбцов. Исходные матрицы не изменяются.
msmul(m,x) - возвращает результат поэлементного умножения матрицы m на скаляр x.
mxmul(m1,m2) - возвращает результат произведения матриц m1 и m2. Матрицы могут быть не соответствующей классическим правилам произведения матриц размерности. Каждая строка матрицы m1 скалярно перемножается на каждый столбец матрицы m2. Исходные матрицы не изменяются.
mimul(a,b) - произведение матриц с естественной индексацией. Матрицы должны быть полностью заполнены и число строк матрицы a должно быть равно числу столбцов матрицы b.
miinv(a) - возвращает матрицу, обратную к a. Параметр a должен быть квадратной матрицей с естественной индексацией (строки и столбцы имеют индексами целые числа, начиная с нуля).
misolve(a,b) - возвращает решение системы линейных уравнений a*x=b. Параметр a должен быть квадратной матрицей с естественной индексацией (строки и столбцы имеют индексами целые числа, начиная с нуля). Массив b должен быть вектором с естественной индексацией и чиcлом элементов, равным числу строк a.

Сортировка и поиск

asort(a,n) - сортирует массив a в соответствии с критерием n и возвращает отсортированный массив. Исходный массив не изменяется. Если n=0, то массив сортируется по возрастанию значений, индексы элементов изменяются. Если n=1, то массив сортируется по возрастанию значений, индексы сохраняются. Если n=2, то массив сортируется по убыванию значений, индексы сохраняются. Если n=3, то массив сортируется по возрастанию значений индексов. Если n=4, то массив сортируется по убыванию значений индексов. Если n=5, то строки сортируются в натуральном порядке ('a10'>'a3', при обычной сортировке 'a10'<'a3'). Если n=6, то элементы массива перемешиваются в случайном порядке.
afind(x,a) - возвращает индекс первого элемента массива, который равен x. Если x в a не найден - возвращает %null.
mrsort(m,c,t) - сортирует строки матрицы в соответствии со значениями в столбце c. Если t=0 сортировка производится по возрастанию, если t=1 - по убыванию. Индексы строк сохраняются.
mcsort(m,r,t) - сортирует столбцы матрицы в соответствии со значениями в строке r. Если t=0 сортировка производится по возрастанию, если t=1 - по убыванию. Индексы столбцов сохраняются.

Вывод данных массивов

aprint(a) - последовательно выводит все элементы одномерного массива a в формате индекс:значение.
atree(a) - выводит массив a в виде дерева.
alist() - пока не использовать
vprint(vector,type) - выводит все индексы и значения одномерного массива vector в виде таблицы. Если type=0, то таблица размещается вертикально (слева индексы - справа значения). Если type=1, то горизонтально в две строки: в верхней - индексы, в нижней - значения.
mprint(m) - выводит матрицу в виде таблицы. В первом столбце выводятся индексы строк. В первой строке - индексы столбцов. Внутри таблицы - значения элементов матрицы.
mbody(m) - базовая часть mprint(). Выводит заголовки столбцов, индексы строк и тело матрицы без вывода HTML-кода начала и конца таблицы. Может использоваться, когда в таблицу нужно включить дополнительные строки до заголовка столбцов или в подножие.
miout(m,r) - аналог mprint, но, в отличие от нее, округляет выводимые числа до r дробных разрядов и в последнем столбце выводит среднее арифметическое по числовым данным каждой строки.
mxprint(matrix,rowname,colname,t1,t2) - производит вывод матрицы matrix, используя массив rowname в качестве названий строк, а массив colname - в качестве названий столбцов. Если rowname не массив, то вывод функции эквивалентен mprint(matrix). Если colname не массив, то в качестве заголовков столбцов выводятся индексы столбцов матрицы. Параметр t1 выводится в качестве заголовка столбца названий строк. Если параметр t2 не пустой, то после столбца названий строк выводится столбец с индексами строк, заголовком которого является t2. Строки матрицы выводятся в последовательности, определяемой порядком следования элементов rowname. Очередной элемент rowname выводится в начале строки. Далее, если это требуется (t2 не пуст), выводится текущий индекс rowname. Далее в строке выводятся все элементы строки матрицы matrix с тем же индексом. Если matrix не содержит строки с этим индексом - выводятся пустые ячейки. Если перед текстом названия строки в элементе rowname стоит точка (.), то вся строка (название строки и данные из matrix) выводятся жирным шрифтом. Если перед текстом названия строки стоит восклицательный знак, то данные не выводятся, а строка выводится одной ячейкой, в которой присутствует только текст названия. По умолчанию t1 и t2 - пустые строки.
Пример В данном примере практически все таблицы выводятся с помощью функции mxprint(). Исходный текст программы см. здесь .
mxshow(data,desc,mcalc,mshow) - функция управления отображением матрицы.
Параметры функции:
 1. data - матрица исходных данных. Столбцы - исследуемые переменные (признаки). Строки - записи (объекты). Рекомендуется формировать с помощью секции .csv и именовать столбцы "правильными" именами переменных.
 2. desc - матрица описаний переменных. На ее основе осуществляется управление выводом отчета. Каждая строка содержит параметры, относящиеся к одной переменной, отображаемой в отчете. Индекс строки - имя переменной (столбца матрицы data или переменной, которая будет включена в записи модулем mcalc). Строки должны быть размещены в порядке следования столбцов отчета. Параметры описания переменной:
stat - выводить (1) или не выводить (0) статистику по данной переменной. По умолчанию 1.
round - число дробных разрядов при выводе. По умолчанию %null.
sort - сортировать по убыванию (0) или по возрастанию (1). По умолчанию 0.
name - текст, отображаемый как заголовок столбца. По умолчанию - имя переменной.
skip - если параметр задан (неважно как), то переменная в отчет не выводится.
value - если параметр задан (неважно как), то уникальные значения данной переменной будут собраны в раскрывающий список, с помощью которого можно будет осуществлять фильтрацию данных.
group - имя массива, содержащего имена массивов, каждый из которых содержит определенное множество значений данной переменной. С помощью выбора конкретного множества можно осуществлять фильтрацию данных.
 3. mcalc - имя модуля пересчета данных.
 4. mshow - имя модуля отбора данных.
По умолчанию mcalc=%null, mshow=%null.
Алгоритм работы функции:
Если в описании хотя бы одной переменной содержатся параметры value или group, то формируются раскрывающиеся списки, с помощью которых пользователь может осуществлять фильтрацию данных. Они и кнопка "Выбрать" выводятся в верхней строке таблицы. Обработчиком формы устанавливается процедура отображения текущего документа с тем, чтобы при повторной загрузке опять получила управление функция mxshow().
Производится перебор строк матрицы. Каждая из них передается модулю mcalc, если он существует. Модуль производит необходимые расчеты и формирует запись, которая может включать как исходные, так и расчетные данные. Данные записываются модулем в ассоциативный массив в той последовательности, в которой должны выводиться столбцы таблицы отчета. Индексы элементов должны быть строками, в точности соответствующими названиям переменных, заданных массивом desc. Если по мнению модуля mcalc строка не должна включаться в отчет, то он должен вернуть %null. Если модуль вернул массив, то он замещает соответствующую строку в матрице исходных данных.
Формируется список заголовков столбцов с учетом параметров name, sort и skip. Если для данного столбца задан skip, то столбец (и его заголовок) не выводятся. Если задан name, то его значение становится заголовком. В противном случае заголовком столбца становится имя соответствующей переменной. Заголовок оформляется как гиперссылка на процедуру вывода текущего документа с тем, чтобы при переходе по ней документ загрузился повторно, но уже с другими параметрами, позволяющими отсортировать данные по значениям этого столбца. Если текущая сортировка произведена по значению данного столбца, то его заголовок как гиперссылка не оформляется.
Если документ загружен с указанием переменной, определяющей порядок сортировки, то строится индекс последовательности вывода строк определяемый убыванием (sort=1) или возрастанием (sort=0) данных этом в столбце.
Строки матрицы просматриваются в порядке, определяемом индексом последовательности вывода. Если задан модуль mshow, от каждая строка передается ему. Если mshow вернул массив, то каждый его элемент выводится отдельной ячейкой строки отчета. То есть считается, что если mshow задан, то он и берет на себя все функции форматирования ячеек строки. Если mshow вернул не массив, то строка не выводится. Если mshow не задан, то элементы строки матрицы выводятся в соответствии с установками массива desc и типом значений. Если значение строка, то она выравнивается влево, если %null, то пустое значение. Если значение - число, то оно выводится с выравниванием вправо. Если для данной переменной задан описатель round, то число округляется в соответствии с его значением. Если round не задан, то число выводится как есть. На форматирование вывода чисел могут влиять также параметры текущей конфигурации (см. раздел "Конфигурирование узлов").
В нижней части таблицы повторно выводятся заголовки столбцов и строки, содержащие значения статистических показателей, рассчитанных по данным, выведенным в отчет.
avg - среднее арифметическое по числовым значениям;
Me - медиана значений столбца.
std - среднее квадратическое отклонение.
As - асимметрия.
Ex - эксцесс.
cor - корреляция с переменной, по значениям которой произведена сортировка.
sum - сумма элементов столбца.
cnt - число элементов, имеющих числовое выражение (не строка и не %null).
Пример использования mxshow() .
Исходный документа-обработчика
Исходные данные . Рейтинг Forbes Global 2000, май 2013
Данные списков фильтрации . Отрасли и предприятия отраслей

Визуализация элементов массивов

ashow(source,mode,r,pix) - выводит цветную "лежачую" гистограмму одномерного массива source. В таблицу включаются: индексы массива; значения его элементов, округленные до r дробных значений; величины значений элементов в процентах к максимальному значению; "закрашенные столбики" размером source(i)*pix/max(source) пикселей. Цвет "столбиков" выбирается по правилам, аналогичным функции histclr(): если source(i)
a2show(x1,r1,x2,r2,pix) - выводит в одной таблице цветные "лежачие" гистограммы двух одномерных массивов x1 и x2. В левой части таблицы выводятся индексы массива x1, его значения, округленные до r1 дробных разрядов и цветной "столбик" размером x1(i)*pix/max(x1) пикселей. В той же строке выводится значение элемента массива x2 с тем же индексом, округленное до r2 дробных разрядов, и соответствующий ему цветной "столбик" размером x2(i)*pix/max(x2) пикселей. Если в массиве x2 нет элемента с таким же индексом, то выводятся пустые графы. По умолчанию pix=300 пикселей. Цвет "столбиков" выбирается по тем же принципам, что и в функции ashow(): темно-синий, если значение меньше среднего; зеленый, если не меньше среднего; красный, если элемент является максимумом.
a3show(x1,r1,x2,r2,x3,r3,pix) - то же, что a2show(), но одновременно выводятся гистограммы трех одномерных массивов.
Рекомендуется использовать функции ashow(), a2show() и a3show() для отображения массивов, имеющих неотрицательные значения. Для отображения массивов, имеющих как положительные, так и отрицательные значения рекомендуется применять функцию xshow().
xshow(data,r,pix) - выводит цветную "лежачую" диаграмму массива одномерного массива data. Если все элементы data неотрицательны, то выход функции эквивалентен ashow(data,0,r,pix). В противном случае "столбики" гистограммы отображаются разнонаправленно, относительно условной нулевой оси. В таблице отображаются: индексы элементов data; их значения, округленные до r дробных разрядов; разнонаправленные относительно нулевой оси "столбики" гистограммы. По умолчанию: r=2,pix=500.
plot(data,parm) - Пока не использовать.

Функции обработки многомерных массивов

tensor - пока не использовать
vector - пока не использовать
matrix - пока не использовать
ssdlink - пока не использовать
ssdmenu - пока не использовать