Создайте длинный массив
создает длинный массив поверх datastore t
= tall(ds
)ds
.
Если ds
является datastore для табличных данных (так что read
и readall
методы возвращаемых таблиц datastore или timetables), затем t
является длинная таблица или длинное расписание, в зависимости от того, что сконфигурировано для возврата datastore. Табличные данные являются данными, которые расположены прямоугольным образом с каждой строкой, имеющей одинаковое количество записей.
В противном случае t
- высокий массив ячеек.
преобразует массив в памяти t
= tall(A
)A
в длинный массив. Базовый тип данных t
то же, что и class(A)
. Этот синтаксис полезен, когда вам нужно быстро создать длинный массив, например, для отладки или прототипирований алгоритмов.
В R2019b и более поздних версиях можно привести массивы в памяти в длинные массивы для более эффективных операций над массивом. После преобразования в длинный массив, MATLAB® избегает создания временных копий всего массива и работает с данными в небольших блоках. Это позволяет вам выполнить более широкую область значений операций в массиве, не заканчивая памятью.
Преобразуйте datastore в длинный массив.
Сначала создайте datastore для набора данных. Вы можете задать полное или относительное расположение файла для набора данных используя datastore(location)
для создания datastore. The location
аргумент может задать:
Один файл, например 'airlinesmall.csv'
Несколько файлов с таким же расширением, например '*.csv'
Целая папка файлов, таких как 'C:\MyData'
tabularTextDatastore
также имеет несколько опций, чтобы задать свойства формата файла и текста при создании datastore.
Создайте datastore для airlinesmall.csv
набор данных. Лечите 'NA'
значения как отсутствующие данные, чтобы они были заменены на NaN
значения. Выберите небольшое подмножество переменных для работы.
varnames = {'ArrDelay', 'DepDelay', 'Origin', 'Dest'}; ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA', ... 'SelectedVariableNames', varnames);
Использование tall
чтобы создать длинный массив для данных в datastore. Начиная с данных в ds
является табличным, результатом является длинная таблица. Если данные не табличны, то tall
вместо этого создает 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'} : : : : : : : :
Для работы с tall arrays можно использовать множество простых операторов и функций MATLAB ®. Чтобы увидеть, работает ли функция с длинные массивы, смотрите раздел Extended Capabilities в нижней части страницы с описанием функции.
Преобразуйте datastore в длинная таблица, вычислите его размер с помощью отложенного вычисления, а затем выполните вычисление и верните результат в памяти.
Сначала создайте datastore для airlinesmall.csv
набор данных. Лечите 'NA'
значения как отсутствующие данные, чтобы они были заменены на NaN
значения. Установите текстовый формат нескольких столбцов так, чтобы они считывались как массив ячеек из векторов символов. Преобразуйте datastore в длинная таблица.
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 не сразу вычисляет значение. Вместо этого, как и большинство операций с длинные массивы, результатом является недооценённый длинный массив, значения и размер которого в настоящее время неизвестны.
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))
чтобы принести в память только небольшой фрагмент результата вычисления.
Создайте массив случайных чисел в памяти, а затем преобразуйте его в длинный массив. Создание длинные массивы из массивов в памяти таким образом полезно для отладки или прототипирования новых программ. Массив в памяти все еще связан нормальными ограничениями памяти, и даже после преобразования в длинный массив он не может вырасти за пределы памяти.
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 и более поздних релизах, когда вы преобразовываете массивы в памяти в длинные массивы, можно выполнить вычисления на массиве, не требуя дополнительной памяти для временных копий данных. Например, этот код нормализует данные в большой матрице, а затем вычисляет сумму всех строк и столбцов. Версия этого вычисления в памяти должна не только хранить массив 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
- Входной datastoreВведите datastore, заданный как объект datastore. Смотрите Datastore для получения дополнительной информации о создании объекта datastore для вашего набора данных.
Длинные массивы работают только с детерминированными хранилищами данных. То есть, если вы используете read
на datastore, сбросьте datastore с reset
, и затем снова считайте datastore, тогда возвращенные данные должны быть одинаковыми в обоих случаях. Вычисления длинный массив с использованием datastore, который не детерминирован, могут привести к непредсказуемым результатам. Дополнительные сведения см. в разделе Выбор Datastore для формата файла или приложения.
Пример: 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
- Длинный массивДлинный массив, возвращенный как один из следующих типов:
При преобразовании datastore t
является длинная таблица или длинное расписание для табличных хранилищ данных. В противном случае t
- высокий массив ячеек.
При преобразовании массива в памяти базовый тип данных t
то же, что и class(A)
.
См. отсроченную оценку длинных массивов для получения информации о том, как эффективно работать с длинными массивами.
См. «Расширение длинных массивов другими продуктами» для получения информации о том, как использовать длинные массивы с:
Statistics and Machine Learning Toolbox™
Parallel Computing Toolbox™
MATLAB Parallel Server™
Database Toolbox™
MATLAB Compiler™
Если у вас установлен Parallel Computing Toolbox, то когда вы используете tall
MATLAB автоматически открывает параллельный пул работников на локальной машине. MATLAB запускает расчеты между доступными работниками. Управление параллельным поведением с параллельными настройками, включая масштабирование до кластера.
Для получения дополнительной информации смотрите Использование длинных массивов в параллельном пуле (Parallel Computing Toolbox).
classUnderlying
| datastore
| gather
| isaUnderlying
| istall
| mapreducer
| topkrows
| write
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.