Преобразовать массив, применив дескриптор функции к блокам данных
[ , где tA,tB,...] = matlab.tall.transform(fcn,tX,tY,...)fcn функция, которая возвращает несколько выходов, возвращает массивы tA,tB,..., каждый соответствует одному из выходных аргументов fcn. Все выходы fcn должен иметь одинаковую высоту, а количество выходов должно совпадать с количеством, которое запрашивается у matlab.tall.transform.
Использовать matlab.tall.transform построение высокого массива нулей с атрибутами, аналогичными другому массиву.
Создание таблицы высокого уровня для airlinesmall.csv набор данных. Данные содержат информацию о времени прилета и вылета рейсов США. Извлеките ArrDelay переменная, которая является вектором задержек поступления.
ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA'); ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'}; tt = tall(ds); tX = tt.ArrDelay
tX =
Mx1 tall double column vector
8
8
21
13
4
59
3
11
:
:
Запишите анонимную функцию, которая создает массив нулей с тем же размером и типом данных, что и входные данные.
zerosLike = @(in) zeros(size(in),'like',in);Использовать matlab.tall.transform для применения zerosLike функция к вектору задержек поступления. Результатом является высокий вектор одинакового размера, но значения которого равны нулю.
s = matlab.tall.transform(zerosLike, tX)
s =
Mx1 tall double column vector
0
0
0
0
0
0
0
0
:
:
Рассчитайте среднюю общую задержку рейса по векторам задержек прибытия и вылета.
Создание таблицы высокого уровня для airlinesmall.csv набор данных. Данные содержат информацию о времени прилета и вылета рейсов США. Извлеките ArrDelay и DepDelay переменные, которые являются векторами задержек прибытия и отправления.
ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA'); ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'}; tt = tall(ds); tX = tt.ArrDelay; tY = tt.DepDelay;
meanDelay функция объединяет входные векторы в матрицу, суммирует значения в каждой строке (игнорируя NaNs), а затем вычисляет среднее значение. Отображение содержимого этого файла функций.
type meanDelayfunction D = meanDelay(a,b) X = [a b]; Y = sum(X,2,'omitnan'); D = mean(Y); end
Использовать matlab.tall.transform для применения meanDelay для каждого блока данных в tX и tY. Результатом является средняя общая задержка в каждом блоке данных.
d = matlab.tall.transform(@meanDelay, tX, tY)
d = 7x1 tall double column vector 14.0621 11.1639 17.2311 15.1852 12.5860 19.8596 14.4036
Эта операция предполагает, что результат уменьшения каждого блока данных до скалярного значения может поместиться в память. Для чрезвычайно больших наборов данных и наборов данных, использующих небольшой размер блока, это предположение может быть неверным.
Найдите максимальное значение и индекс этого значения в каждой строке данных.
Создание таблицы высокого уровня для airlinesmall.csv набор данных. Данные содержат информацию о времени прилета и вылета рейсов США. Извлеките ArrDelay и DepDelay переменные, которые являются векторами задержек прибытия и отправления.
ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA'); ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'}; tt = tall(ds); tX = tt.ArrDelay; tY = tt.DepDelay;
maxDelay функция объединяет входные векторы, а затем находит максимальную длительность задержки поступления или отправления и индекс столбца. Отображение содержимого этого файла.
type maxDelayfunction [M,I] = maxDelay(A,B) X = [A B]; [M,I] = max(X,[],2); end
Использовать matlab.tall.transform для применения maxDelay для каждого блока данных в tX и tY. Результатом является максимальная задержка поступления или отправления для каждой строки данных, а также вектор индекса, указывающий, из какого столбца получено максимальное значение. Индекс 1 указывает, что задержка поступления в этой строке больше, а индекс 2 указывает, что задержка отправления больше.
[M, idx] = matlab.tall.transform(@maxDelay, tX, tY)
M =
Mx1 tall double column vector
12
8
21
13
4
63
3
11
:
:
idx =
Mx1 tall double column vector
2
1
1
1
1
2
1
1
:
:
Используйте 'OutputsLike' для возврата таблицы из matlab.tall.transform с переменными, отличными от входной таблицы.
Создайте высокую таблицу с двумя переменными случайных значений.
T = tall(table(rand(1e6,1),rand(1e6,1)))
T =
1,000,000x2 tall table
Var1 Var2
_______ _______
0.81472 0.90399
0.90579 0.94095
0.12699 0.80252
0.91338 0.24205
0.63236 0.97566
0.09754 0.31723
0.2785 0.81279
0.54688 0.69743
: :
: :
Функция tableDiff вычисляет разницу между двумя переменными входной таблицы и добавляет результат как новую переменную в таблицу. Отображение содержимого файла.
type tableDifffunction Tout = tableDiff(Tin) d = Tin.Var2 - Tin.Var1; Tin.Var3 = abs(d); Tout = Tin; end
Использовать matlab.tall.transform для применения tableDiff для каждого блока данных в T. Поскольку выходная таблица имеет переменные, отличные от входной таблицы, используйте 'OutputsLike' пара имя-значение для предоставления таблицы прототипа с теми же переменными, что и на выходе (три переменные с именами по умолчанию Var1, Var2, и Var3).
Z = matlab.tall.transform(@tableDiff, T, 'OutputsLike', {table(1,1,1)})Z =
Mx3 tall table
Var1 Var2 Var3
_______ _______ ________
0.81472 0.90399 0.089267
0.90579 0.94095 0.035156
0.12699 0.80252 0.67553
0.91338 0.24205 0.67133
0.63236 0.97566 0.3433
0.09754 0.31723 0.21969
0.2785 0.81279 0.53429
0.54688 0.69743 0.15054
: : :
: : :
fcn - Функция преобразования для примененияПрименяемая функция преобразования, заданная как дескриптор функции или анонимная функция. Каждый выход fcn должен быть того же типа, что и первый вход tX. Вы можете использовать 'OutputsLike' для возврата выходов различных типов данных. Если fcn возвращает несколько выходных данных, все выходные данные должны иметь одинаковую высоту.
Общая функциональная подпись fcn является
[a, b, c, ...] = fcn(x, y, z, ...)
fcn должны удовлетворять этим требованиям:
Входные аргументы - входные данные [x, y, z, ...] представляют собой блоки данных, которые помещаются в память. Блоки создаются путем извлечения данных из соответствующих входных данных массива высокого уровня. [tX, tY, tZ, ...]. Исходные данные [x, y, z, ...] удовлетворяют этим свойствам:
Все из [x, y, z, ...] имеют одинаковый размер в первом измерении после любого разрешенного расширения.
Блоки данных в [x, y, z, ...] происходит из одного и того же индекса в высоком измерении, предполагая, что высокий массив является несинглтоном в высоком измерении. Например, если tX и tY nonsingleton в высоком измерении, то первый набор блоков может быть x = tX(1:20000,:) и y = tY(1:20000,:).
Если первый размер любого из [tX, tY, tZ, ...] имеет размер 1, то соответствующий блок [x, y, z, ...] состоит из всех данных в этом массиве высокого уровня.
Аргументы вывода - выходные данные [a, b, c, ...] являются блоками, которые помещаются в память, для отправки на соответствующие выходы [tA, tB, tC, ...]. Продукция [a, b, c, ...] удовлетворяют этим свойствам:
Все из [a, b, c, ...] должен иметь одинаковый размер в первом измерении.
Все из [a, b, c, ...] связаны по вертикали с соответствующими результатами предыдущих вызовов fcn.
Все из [a, b, c, ...] отправляются в один и тот же индекс в первом измерении в соответствующих выходных массивах назначения.
Функциональные правила - fcn должно удовлетворять функциональному правилу:
F([inputs1; inputs2]) == [F(inputs1); F(inputs2)]Применение функции к конкатенации входов должно быть таким же, как применение функции к входам по отдельности, а затем к конкатенации результатов.
Пустые входы - убедитесь, что fcn может обрабатывать входные данные, высота которых равна 0. Пустые входные данные могут возникать, когда файл пуст или если вы провели большую фильтрацию данных.
Например, эта функция принимает два входных массива, строит их в квадрат и возвращает два выходных массива:
function [xx,yy] = sqInputs(x,y) xx = x.^2; yy = y.^2; end
tX и tY с помощью этой команды:[tA,tB] = matlab.tall.transform(@sqInputs,tX,tY)
Пример: tA = matlab.tall.transform(@(x) x .* 2, tX) задает анонимную функцию для умножения значений в tX на 2.
Пример: tC = matlab.tall.transform(@plus,tX,tY) задает дескриптор функции @plus для добавления двух массивов вместе.
Типы данных: function_handle
tX, tY - Входные массивыВходные массивы, указанные как скаляры, векторы, матрицы или многомерные массивы. Входные массивы используются в качестве входных данных для указанной функции fcn. Каждый входной массив tX,tY,... должны иметь совместимые высоты. Два входа имеют совместимую высоту, когда они имеют одинаковую высоту, или когда один вход имеет высоту один.
PA, PB - Прототип выходных массивовПрототип выходных массивов, указанных как массивы. При указании 'OutputsLike', выходные массивы tA,tB,... возвращено matlab.tall.transform имеют те же типы данных, что и указанные массивы {PA,PB,...}.
Пример: tA = matlab.tall.transform(fcn,tX,'OutputsLike',{int8(1)});, где tX является массивом с двойной точностью, возвращает A как int8 вместо double.
tA, tB - Выходные массивыВыходные массивы, возвращаемые в виде скаляров, векторов, матриц или многомерных массивов. При наличии входных данных matlab.tall.transform высокий, тогда все выходные аргументы также высокие. В противном случае все выходные аргументы являются массивами в памяти.
Размер и тип данных выходных массивов зависят от указанной функции fcn. В целом, выходные данные tA,tB,... все должны иметь тот же тип данных, что и первый вход X. Однако можно указать 'OutputsLike' для возврата различных типов данных. Выходные массивы tA,tB,... все имеют одинаковую высоту.
При создании массива высокого уровня из хранилища данных нижележащее хранилище данных облегчает перемещение данных во время вычисления. Данные перемещаются в дискретных фрагментах, называемых блоками или порциями, где каждый блок представляет собой набор последовательных строк, которые могут поместиться в памяти. Например, один блок массива 2-D (например, таблица) X(n:m,:), для некоторых подстрочных индексов n и m. Размер каждого блока основан на значении ReadSize свойство хранилища данных, но блок может иметь не такой размер. Для целей matlab.tall.transform, высокий массив считается вертикальной конкатенацией многих таких блоков:

Например, при использовании sum функция как функция преобразования, результатом является сумма на блок. Поэтому вместо возврата одного скалярного значения для суммы элементов результатом является вектор с длиной, равной числу блоков.
ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA'); ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'}; tt = tall(ds); tX = tt.ArrDelay; f = @(x) sum(x,'omitnan'); s = matlab.tall.transform(f, tX); s = gather(s)
s =
140467
101065
164355
135920
111182
186274
21321Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.