Преобразуйте массив путем применения указателя на функцию к блокам данных
tA = matlab.tall.transform(fcn,tX)
tA = matlab.tall.transform(fcn,tX,tY,...)
[tA,tB,...] = matlab.tall.transform(fcn,tX,tY,...)
[tA,tB,...] = matlab.tall.transform(___,'OutputsLike',{PA,PB,...})
[
, то, где 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 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;
Функция 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 = 1,000,000x3 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
являются неодиночным элементом в высокой размерности, то первым набором блоков может быть 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,...
у всех есть та же высота.
Когда вы создаете длинный массив из datastore, базовый datastore упрощает перемещение данных во время вычисления. Перемещения данных в дискретных частях вызвали блоки или фрагменты, где каждый блок является набором последовательных строк, которые могут уместиться в памяти. Например, одним блоком 2D массива (такого как таблица) является 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.