table

Составление таблицы

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

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

Синтаксис

table()
table(index1 = entry1, index2 = entry2, …, <default>)
table(<list>, <set>, <tab>, …, <default>)

Описание

table() составляет новую пустую таблицу.

table(index1 = entry1, index2 = entry2, ...) составляет новую таблицу с данными индексами и записями.

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

Для tableT, скажем, индексируемый вызов T[index] возвращает соответствующую запись. Если никакая такая запись не существует, значение по умолчанию таблицы возвращено, если таблица имеет тот. Если никакое значение по умолчанию не было установлено и, индексируемое выражение, T[index] возвращен символически.

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

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

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

Если значение идентификатора, T, скажем, не является ни таблицей, ни массивом, ни hfarray, ни списком, то индексируемое присвоение T[index] := entry эквивалентно T := table(index = entry). Т.е. неявно, новая таблица с одной записью составлена. Cf. Пример 3.

Если значение T было или таблицей или массивом или hfarray или списком, то индексируемое присвоение только вставляет новую запись, не изменяя тип T неявно.

Записи таблицы могут быть удалены с функциональным delete. Cf. Пример 4.

Примеры

Пример 1

Следующий вызов составляет таблицу с двумя записями:

T := table(a = 13, c = 42)

К данным можно получить доступ через индексируемые вызовы. Отметьте символьный результат индексом b, который не имеет соответствующей записи в таблице:

T[a], T[b], T[c]

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

T[a] := T[a] + 10: T

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

T := table((a, b) = "hello", a + b = (50, 70))

T[a + b]

Индексный доступ не требует дополнительных скобок:

T[a, b] := T[a, b]." world": T

delete T:

Пример 2

table может быть создан из других таблиц, списков или наборов:

table(table(a = 1, b = 2),
      {a = 3, c = 4},
      [b = 5, e = 6])

Обратите внимание на то, что набор не имеет никакого порядка операндов. Когда набор содержит несколько значений под тем же индексом, запись таблицы выбрана “случайным образом”:

table({a = 3, a = 4});
table({a = 4, a = 3})

Пример 3

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

delete T: T[4] := 7: T

delete T:

Пример 4

Используйте delete, чтобы удалить записи:

T := table(a = 1, b = 2, (a, b) = (1, 2))

delete T[b], T[a, b]: T

delete T:

Пример 5

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

T := table():
L := [1,2,3,a,b,c,a,b,a]:
for i in L do
  if contains(T, i) then
    T[i] := T[i] + 1;
  else
    T[i] := 1;
  end_if;
end_for:
T

Отметьте тест, был ли T[i] уже установлен. Если бы это не имеет, мы не можем использовать его предыдущее значение, потому что это осталось бы символьным:

T := table():
T[a] := T[a] + 1:
T

Путем создания T как table(0) вместо table() мы можем сказать MuPAD рассматривать T[i] как 0, если этому не сказали ничто больше, и код сверху становится существенно короче и, намного более важный, намного легче читать:

T := table(0):
L := [1,2,3,a,b,c,a,b,a]:
for i in L do
  T[i] := T[i] + 1;
end_for:
T

Немного более сложная версия, считая все идентификаторы в выражении:

ex := sin(a*x+b)-cos(c+x):
cnt := table(0):
misc::maprec(ex,
  {DOM_IDENT} = (x -> (cnt[x] := cnt[x]+1; x))):
cnt

Параметры

index1, index2, …

Индексы: произвольные объекты MuPAD

entry1, entry2, …

Соответствующие записи: произвольные объекты MuPAD

list

Список уравнений

set

Набор уравнений

tab

Таблица

default

Значение по умолчанию: объект MuPAD, который не является уравнением, списком, набором, ни таблицей

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

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

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

Области MuPAD

Функции MuPAD