array

Создайте массив

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Для массивов в MATLAB® см. Матрицы и Массивы (MATLAB).

Синтаксис

array(m1 .. n1, <m2 .. n2, …>)
array(m1 .. n1, <m2 .. n2, …>, index1 = entry1, index2 = entry2, …)
array(m1 .. n1, <m2 .. n2, …>, List)
array(<m1 .. n1, m2 .. n2, …>, ListOfLists)

Описание

array(...) создает массив, который является n - размерная прямоугольная структура, содержащая произвольные данные.

array(m_1..n_1, m_2..n_2, ...) создает массив с неинициализированными записями, куда первый индекс запускается от m 1 к n 1, вторые запуски индекса от m 2 к n 2, и так далее.

array( m_1..n_1, m_2..n_2 , ..., List) создает массив с записями, инициализированными от List.

array(ListOfLists) создает массив с записями, инициализированными от ListOfLists. Размерность массива совпадает с размерностью ListOfLists.

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

Массивы создаются array имеют доменный тип DOM_ARRAY. Они могут содержать произвольные объекты MuPAD® как записи.

Для массива A из типа DOM_ARRAY или DOM_HFARRAY и последовательность целых чисел index формируя допустимый индекс массива, индексируемый вызов A[index] возвращает соответствующую запись. Если запись массива типа DOM_ARRAY является неинициализированным, затем индексируемое выражение A[index] возвращен. Смотрите Пример 1 и Пример 5.

Индексируемое присвоение формы A[index] := entry инициализирует или перезаписывает запись, соответствующую index. Смотрите пример 1 и пример 5.

Контуры индекса должны удовлетворить m 1n 1, m 2n 2, и так далее. Размерность полученного массива является количеством данных аргументов области значений; по крайней мере один аргумент области значений должен быть задан. Общее количество записей полученного массива (n 1 - m 1 + 1)   (n 2 - m 2 + 1)   ….

Если только индексируют аргументы области значений, даны, то array создает массив с неинициализированными записями. Записи автоматически установлены в 0,0, если никакие значения не заданы. Смотрите Пример 1.

Если уравнения формы index = entry присутствуют, затем запись массива, соответствующая index инициализируется с entry. Это полезно для того, чтобы выборочно инициализировать некоторые конкретные записи массива.

Каждый индекс должен быть допустимым индексом массива формы i1 для одномерных массивов и (i1, i2, …) для более многомерных массивов, где i1, i2, … целые числа в допустимых контурах, удовлетворяя m 1i 1n 1, m 2i 2n 2, и так далее, и количество целых чисел в index совпадает с размерностью массива.

Если вы используете аргумент List, затем полученный массив инициализируется с записями от List. Это полезно для инициализации всех записей массива целиком. List должен иметь (n 1 - m 1 + 1)   (n 2 - m 2 + 1)   … элементы, каждый становящийся операндом массива, который будет создан. В случае двумерных массивов, рассматриваемых как матрицы, список содержит строку записей после строки.

Аргумент ListOfLists должен быть вложенный список, совпадающий со структурой массива точно. Глубина вложения списка должна быть больше или равной размерности массива. Количество записей списка в k-th уровень вложенности должно быть равно размеру k-th область значений индекса, то есть, n k - m k + 1. Смотрите Пример 7.

delete A[index] удаляет запись, соответствующую index, так, чтобы это стало неинициализированным. Смотрите Пример 5.

Примечание

Внутренне, неинициализированные записи массива доменного типа DOM_ARRAY имейте значение NIL. Таким образом присвоение NIL к записи массива оказывает то же влияние как удаление его через delete. Впоследствии, индексируемый вызов формы A[index] возвращает символьное выражение A[index], и не NIL. Смотрите пример 5.

Одномерный массив распечатан как вектор-строка. Индекс соответствует номеру столбца.

Двумерный массив распечатан как матрица. Первый индекс соответствует номеру строки, и второй индекс соответствует номеру столбца.

Большие массивы, которые превышают максимальный выход width TEXTWIDTH распечатаны в форме array( m_1..n_1, m_2..n_2, dots, index_1 = entry_1, index_2 = entry_2, dots ). Смотрите пример 6, пример 7 и пример 10.

Арифметические операции не заданы для массивов доменного типа DOM_ARRAY. Используйте matrix создать одномерные векторы или двумерные матрицы в математическом смысле.

Отметьте следующую специальную функцию массивов доменного типа DOM_ARRAY:

Примечание

Если массив оценен, он только возвращен. Оценка не сопоставляет рекурсивно на записях массива! Это происходит из-за причин производительности. Вы имеете к map функциональный eval явным образом на массиве для того, чтобы полностью оценить его записи. Смотрите Пример 8

Примеры

Пример 1

Создайте неинициализированный одномерный массив с индексами в пределах от 2 - 4:

A := array(2..4)

NILs в выходе указывают, что записи массива не инициализируются. Установите среднюю запись в 5 и последнюю запись в "MuPAD":

A[3] := 5: A[4] := "MuPAD": A

Можно получить доступ к записям массива при помощи индексируемых вызовов. Поскольку запись A[2] не инициализируется, символьное выражение A[2] возвращен:

A[2], A[3], A[4]

Можно уже инициализировать массив при создании его передающими уравнениями инициализации к array:

A := array(2..4, 3 = 5, 4 = "MuPAD")

Можно инициализировать все записи массива при создании его путем передачи списка начальных значений к array:

array(2..4, [PI, 5, "MuPAD"])

Пример 2

Границы массива могут быть заданы отрицательными целыми числами:

A := array(-1..1, [2, sin(x), FAIL])

A[-1], A[0], A[1]

delete A:

Пример 3

Если размерность и размер array не заданы явным образом, затем оба значения приняты из данного списка:

array([[1,2],[3,4],[5,6]]) = array(1..3, 1..2, [[1,2],[3,4],[5,6]]);
bool(%)

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

array([[1],[3,4],[5,6]])
Error: Invalid argument. [array]

Пример 4

Можно использовать $ оператор, чтобы создать последовательность уравнений инициализации:

array(1..8, i = i^2 $ i = 1..8)

Эквивалентно, можно использовать $ оператор, чтобы создать список инициализаций:

array(1..8, [i^2 $ i = 1..8])

Пример 5

Создайте 2×2 матрица как двумерный массив:

A := array(1..2, 1..2, (1, 2) = 42, (2, 1) = 1 + I)

Внутренне, записи массива хранятся в линеаризовавшей форме. К ним можно получить доступ в этой форме через op. Неинициализированные записи внутренне имеют значение NIL:

op(A, 1), op(A, 2), op(A, 3), op(A, 4)

Отметьте различие для индексного доступа:

A[1, 1], A[1, 2], A[2, 1], A[2, 2]

Измените запись массива индексируемым присвоением:

A[1, 1] := 0: A[1, 2] := 5:
A

Удалите значение записи массива через delete. Впоследствии, это является неинициализированным снова:

delete A[2, 1]: A[2, 1], op(A, 3)

Присвоение NIL к записи массива оказывает то же влияние как удаление его:

A[1, 2] := NIL: A[1, 2], op(A, 2)

Пример 6

Задайте 3D массив со значениями индекса между 1 и 8 в каждом из трех измерений. Инициализируйте две из записей через уравнения инициализации:

A := array(1..8, 1..8, 1..8, (1, 1, 1) = 111, (8, 8, 8) = 888)

A[1, 1, 1], A[1, 1, 2]

delete A

Пример 7

Можно использовать вложенный список, чтобы инициализировать двумерный массив. Внутренние списки являются строками созданной матрицы:

array(1..2, 1..3, [[1, 2, 3], [4, 5, 6]])

Создайте 3D массив и инициализируйте его из вложенного списка глубины три. Внешний список имеет две записи для первой размерности. Каждая из этих записей является списком с тремя записями для второго измерения. Наконец, самые внутренние списки у каждого есть одна запись для третьей размерности:

array(2..3, 1..3, 1..1,
      [
        [ [1], [2], [3] ],
        [ [4], [5], [6] ]
      ])

Пример 8

Если массив оценен, он только возвращен. Оценка не сопоставляет рекурсивно на записях массива. Здесь, записи a и b не оценены:

A := array(1..2, [a, b]):
a := 1:  b := 2:
A, eval(A)

Из-за специальной оценки массивов оператор индекса оценивает записи массива после извлечения их от массива:

A[1], A[2]

Полностью оценивать его записи, map функциональный eval явным образом на массиве:

map(A, eval)

Пример 10

Двумерный массив обычно распечатывается в матричной форме:

A := array(1..4, 1..4, (1, 1) = 11, (4, 4) = 44)

Если выход не помещается в TEXTWIDTH, более компактный выход используется в print:

PRETTYPRINT := FALSE:
TEXTWIDTH := 20:
print(Plain, A)
array(1..4, 1..4, (\
1, 1) = 11, (4, 4) \
= 44)
PRETTYPRINT := TRUE:
delete A, TEXTWIDTH

Параметры

m1, n1, m2, n2, …

Контуры индекса: целые числа

index1, index2, …

Последовательность целых чисел, задающих допустимый индекс массива

entry1, entry2, …

Произвольные объекты

List

Простой список записей для инициализации массива

ListOfLists

Вложенный список (списков списков …) записей для инициализации массива

Возвращаемые значения

Объект типа DOM_ARRAY.

Смотрите также

Области MuPAD

Функции MuPAD