Преобразуйте массив путем применения указателя на функцию к блокам данных
[
, где 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;
The meanDelay
функция конкатенирует входные векторы в матрицу, суммирует значения в каждой строке (игнорируя NaNs), а затем вычисляет среднее значение. Отображение содержимого этой функции файла.
type meanDelay
function 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;
The maxDelay
функция конкатенирует входные векторы, а затем находит максимальную длительность задержки прибытия или отправления и ее индекс столбца. Отображение содержимого этого файла.
type maxDelay
function [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 tableDiff
function 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, ...]
происходит от того же индекса в tall размерности, принимая, что длинный массив является nonsingleton в tall размерности. Для примера, если tX
и tY
nonsingleton в tall размерности, тогда первый набор блоков может быть 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,...
должны иметь совместимые высоты. Два входа имеют совместимую высоту, когда они имеют одинаковую высоту, или когда один вход имеет высоту 1.
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
tall, тогда все выходные аргументы также высокие. В противном случае все выходные аргументы являются массивами в памяти.
Размер и тип данных выходных массивов зависят от заданной функции fcn
. В целом выходы tA,tB,...
все должны иметь тот совпадающий тип данных, что и первый вход X
. Однако можно задать 'OutputsLike'
для возврата различных типов данных. Массивы выхода tA,tB,...
все имеют одинаковую высоту.
Когда вы создаете длинный массив из datastore, базовый datastore облегчает перемещение данных во время вычисления. Данные перемещаются дискретными частями, называемыми блоками или фрагментами, где каждый блок является набором последовательных строк, которые могут помещаться в памяти. Например, один блок 2-D массива (такого как таблица) X(n:m,:)
, для некоторых нижних индексов n
и m
. Размер каждого блока основан на значении ReadSize
свойство datastore, но блок может быть не того размера. В целях 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.