Создать массив высокого уровня
создает высокий массив поверх хранилища данных t = tall(ds)ds.
Если ds является хранилищем данных для табличных данных (так что read и readall методы возвращаемых хранилищ данных таблиц или расписаний), то t является высокой таблицей или высоким расписанием, в зависимости от конфигурации хранилища данных для возврата. Табличные данные - это данные, которые расположены прямоугольным образом с каждой строкой, имеющей одинаковое количество записей.
В противном случае t - массив высоких ячеек.
преобразует массив в памяти t = tall(A)A в высокий массив. Базовый тип данных t является таким же, как class(A). Этот синтаксис полезен, когда необходимо быстро создать массив высокого уровня, например, для отладки или прототипирования алгоритмов.
В R2019b и более поздних версиях массивы в памяти можно преобразовывать в массивы tall для повышения эффективности операций с массивом. После преобразования в массив высокого уровня MATLAB ® избегает создания временных копий всего массива и работает с данными в меньших блоках. Это позволяет выполнять более широкий спектр операций с массивом без нехватки памяти.
Преобразование хранилища данных в массив высокого уровня.
Сначала создайте хранилище данных для набора данных. Можно указать полное или относительное расположение файла для набора данных с помощью datastore(location) для создания хранилища данных. location аргумент может указывать:
Один файл, например 'airlinesmall.csv'
Несколько файлов с одним и тем же расширением, например '*.csv'
Целая папка файлов, например 'C:\MyData'
tabularTextDatastore также имеет несколько опций для задания свойств файла и текстового формата при создании хранилища данных.
Создание хранилища данных для airlinesmall.csv набор данных. Удовольствие 'NA' значения как отсутствующие данные, чтобы они были заменены на NaN значения. Выберите небольшое подмножество переменных для работы.
varnames = {'ArrDelay', 'DepDelay', 'Origin', 'Dest'};
ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA', ...
'SelectedVariableNames', varnames);Использовать tall для создания массива высокого уровня для данных в хранилище данных. Так как данные в ds табличный, результат - высокая таблица. Если данные не являются табличными, то tall создает массив высоких ячеек.
T = tall(ds)
T =
Mx4 tall table
ArrDelay DepDelay Origin Dest
________ ________ _______ _______
8 12 {'LAX'} {'SJC'}
8 1 {'SJC'} {'BUR'}
21 20 {'SAN'} {'SMF'}
13 12 {'BUR'} {'SJC'}
4 -1 {'SMF'} {'LAX'}
59 63 {'LAX'} {'SJC'}
3 -2 {'SAN'} {'SFO'}
11 -1 {'SEA'} {'LAX'}
: : : :
: : : :
Для работы с массивами уровня можно использовать множество обычных операторов и функций MATLAB ®. Чтобы узнать, работает ли функция с массивами tall, проверьте раздел Extended Capabilities в нижней части страницы ссылки на функцию.
Преобразуйте хранилище данных в таблицу высокого уровня, рассчитайте его размер с помощью отложенного расчета, а затем выполните расчет и верните результат в память.
Сначала создайте хранилище данных для airlinesmall.csv набор данных. Удовольствие 'NA' значения как отсутствующие данные, чтобы они были заменены на NaN значения. Задайте текстовый формат нескольких столбцов так, чтобы они считывались как массив ячеек символьных векторов. Преобразование хранилища данных в таблицу высокого уровня.
ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA'); ds.SelectedFormats{strcmp(ds.SelectedVariableNames, 'TailNum')} = '%s'; ds.SelectedFormats{strcmp(ds.SelectedVariableNames, 'CancellationCode')} = '%s';
T = tall(ds)
T =
Mx29 tall table
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay
____ _____ __________ _________ _______ __________ _______ __________ _____________ _________ _______ _________________ ______________ _______ ________ ________ _______ _______ ________ ______ _______ _________ ________________ ________ ____________ ____________ ________ _____________ _________________
1987 10 21 3 642 630 735 727 {'PS'} 1503 {'NA'} 53 57 NaN 8 12 {'LAX'} {'SJC'} 308 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN
1987 10 26 1 1021 1020 1124 1116 {'PS'} 1550 {'NA'} 63 56 NaN 8 1 {'SJC'} {'BUR'} 296 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN
1987 10 23 5 2055 2035 2218 2157 {'PS'} 1589 {'NA'} 83 82 NaN 21 20 {'SAN'} {'SMF'} 480 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN
1987 10 23 5 1332 1320 1431 1418 {'PS'} 1655 {'NA'} 59 58 NaN 13 12 {'BUR'} {'SJC'} 296 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN
1987 10 22 4 629 630 746 742 {'PS'} 1702 {'NA'} 77 72 NaN 4 -1 {'SMF'} {'LAX'} 373 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN
1987 10 28 3 1446 1343 1547 1448 {'PS'} 1729 {'NA'} 61 65 NaN 59 63 {'LAX'} {'SJC'} 308 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN
1987 10 8 4 928 930 1052 1049 {'PS'} 1763 {'NA'} 84 79 NaN 3 -2 {'SAN'} {'SFO'} 447 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN
1987 10 10 6 859 900 1134 1123 {'PS'} 1800 {'NA'} 155 143 NaN 11 -1 {'SEA'} {'LAX'} 954 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN
: : : : : : : : : : : : : : : : : : : : : : : : : : : : :
: : : : : : : : : : : : : : : : : : : : : : : : : : : : :
Отображение таблицы высокого уровня указывает на то, что MATLAB ® еще не знает, сколько строк данных находится в таблице.
Вычислите размер таблицы высокого уровня. Поскольку для вычисления размера массива высокого уровня требуется полный проход через данные, MATLAB вычисляет значение не сразу. Вместо этого, как и в случае большинства операций с массивами tall, результатом является невысокий массив tall, значения и размер которого в настоящее время неизвестны.
s = size(T)
s =
1x2 tall double row vector
? ?
Используйте gather для выполнения отложенного расчета и возврата результата в память. Результат, возвращенный size - тривиально маленький вектор 1 на 2, который вписывается в память.
sz = gather(s)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.2 sec Evaluation completed in 1.4 sec
sz = 1×2
123523 29
Если вы используете gather на невключенном массиве высокого уровня, то результат может не поместиться в память. Если вы не уверены, возвращен ли результат gather может поместиться в памяти, использовать gather(head(X)) или gather(tail(X)) для ввода в память лишь небольшой части результата вычисления.
Создайте массив случайных чисел в памяти, а затем преобразуйте его в массив высокого уровня. Создание tall-массивов из массивов в памяти таким образом полезно для отладки или прототипирования новых программ. Массив в памяти по-прежнему ограничен обычными ограничениями памяти, и даже после преобразования в массив высокого уровня он не может вырасти за пределы памяти.
A = rand(100,4); tA = tall(A)
tA =
100x4 tall double matrix
0.8147 0.1622 0.6443 0.0596
0.9058 0.7943 0.3786 0.6820
0.1270 0.3112 0.8116 0.0424
0.9134 0.5285 0.5328 0.0714
0.6324 0.1656 0.3507 0.5216
0.0975 0.6020 0.9390 0.0967
0.2785 0.2630 0.8759 0.8181
0.5469 0.6541 0.5502 0.8175
: : : :
: : : :
В R2019b и более поздних выпусках при преобразовании массивов в формате in-memory в массивы tall можно выполнять вычисления в массиве, не требуя дополнительной памяти для временных копий данных. Например, этот код нормализует данные в большой матрице, а затем вычисляет сумму всех строк и столбцов. Версия этого расчета в памяти должна не только хранить 5GB массив, но и иметь достаточно памяти для создания временных копий массива.
N = 25000; tA = tall(rand(N)); tB = tA - mean(tA); S = gather(sum(tB, [1,2]))
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 2: Completed in 2.9 sec - Pass 2 of 2: Completed in 4.7 sec Evaluation completed in 8 sec
S = -3.1878e-10
ds - Хранилище входных данныхВходное хранилище данных, указанное как объект хранилища данных. Дополнительные сведения о создании объекта хранилища данных для набора данных см. в разделе Хранилище данных.
Массивы Tall работают только с детерминированными хранилищами данных. То есть, если вы используете read в хранилище данных, сбросьте хранилище данных с помощью resetзатем снова считывайте хранилище данных, а затем возвращаемые данные должны быть одинаковыми в обоих случаях. Вычисления массива высокого уровня с использованием хранилища данных, которое не является детерминированным, могут привести к непредсказуемым результатам. Дополнительные сведения см. в разделе Выбор хранилища данных для формата файла или приложения.
Пример: ds = tabularTextDatastore('airlinesmall.csv') указывает один файл.
Пример: ds = tabularTextDatastore('*.csv') задает коллекцию .csv файлы.
Пример: ds = spreadsheetDatastore('C:\MyData') указывает папку файлов электронных таблиц.
Пример: ds = datastore('hdfs:///data/') указывает набор данных в файловой системе HDFS.
A - Переменная в памятиПеременная в памяти, заданная как массив.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | table | timetable | string | cell | categorical | datetime | duration | calendarDuration
Поддержка комплексного номера: Да
t - Высокий массивВысокий массив, возвращаемый как один из следующих типов:
При преобразовании хранилища данных t является высокой таблицей или высоким расписанием для табличных хранилищ данных. В противном случае t - массив высоких ячеек.
При преобразовании массива в памяти базовый тип данных t является таким же, как class(A).
Сведения об эффективной работе с массивами tall см. в разделе Отложенная оценка массивов Tall.
Для получения информации о том, как использовать массивы tall с:
Статистика и машинное обучение Toolbox™
Параллельные вычисления Toolbox™
Параллельный Server™ MATLAB
Toolbox™ базы данных
MATLAB Compiler™
Если установлена панель инструментов Parallel Computing Toolbox, то при использовании tallMATLAB автоматически открывает параллельный пул работников на локальном компьютере. MATLAB выполняет вычисления для всех доступных работников. Управление поведением параллели с помощью настроек параллелизма, включая масштабирование до кластера.
Дополнительные сведения см. в разделе Использование массивов Tall в параллельном пуле (панель инструментов параллельных вычислений).
classUnderlying | datastore | gather | isaUnderlying | istall | mapreducer | topkrows | write
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.