Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

tall

创建 tall 数组

说明

示例

t = tall(ds) 基于数据存储 ds 创建一个 tall 数组。

  • 如果 ds 是用于表格数据的数据存储(以使数据存储的 readreadall 方法返回表或时间表),则 t 是一个 tall 表或 tall 时间表,具体取决于数据存储配置为返回哪种类型。表格数据是以矩形方式排列且每一行具有相同条目数的数据。

  • 否则,t 是一个 tall 元胞数组。

示例

t = tall(A) 将内存数组 A 转换为 tall 数组。tclass(A) 具有相同的基本数据类型。当您需要快速创建一个 tall 数组时,例如对算法进行调试或原型构建时,该语法非常有用。

在 R2019b 及更高版本中,您可以将内存数组转换为 tall 数组,对数组执行更高效的运算。在转换为 tall 数组后,MATLAB® 可免于生成整个数组的临时副本,而是以较小的分块处理数据。这让您能够对数组执行各种运算,而不会耗尽内存。

示例

全部折叠

将数据存储转换为 tall 数组。

首先,为数据集创建数据存储。您可以使用 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 为数据存储中的数据创建一个 tall 数组。由于 ds 中的数据是表格数据,因此结果是一个 tall 表。如果数据不是表格数据,则 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'}
       :           :           :          :
       :           :           :          :

您可以使用多个常用的 MATLAB® 运算符和函数来处理 tall 数组。要查看函数是否适用于 tall 数组,请查看函数参考页底部的扩展功能部分。

将数据存储转换为 tall 表,使用延迟计算来计算其大小,然后执行计算并在内存中返回结果。

首先,为 airlinesmall.csv 数据集创建数据存储。将 'NA' 值视为缺失数据,以使它们被替换为 NaN 值。设置几个列的文本格式,以便将它们作为字符向量元胞数组读取。将数据存储转换为 tall 表。

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       
     :        :          :             :           :           :            :           :               :              :           :               :                  :              :          :           :           :          :          :          :          :           :               :               :             :               :             :              :                  :
     :        :          :             :           :           :            :           :               :              :           :               :                  :              :          :           :           :          :          :          :          :           :               :               :             :               :             :              :                  :

tall 表的显示内容指示 MATLAB® 尚不了解表中有多少行数据。

计算 tall 表的大小。由于计算 tall 数组的大小需要完全遍历数据,因此 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.1 sec
Evaluation completed in 1.4 sec
sz = 1×2

      123523          29

如果对未约简的 tall 数组使用 gather,则结果可能不适合放在内存中。如果您不确定 gather 返回的结果是否适合放在内存中,请使用 gather(head(X))gather(tail(X)) 只将一小部分计算结果放入内存中。

创建一个由随机数组成的内存数组,然后将其转换为 tall 数组。以这种方式从内存数组创建 tall 数组对于新程序的调试或原型构建非常有用。内存数组仍然受正常内存限制的约束,即使在它转换为 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 及更高版本中,当您将内存数组转换为 tall 数组时,可以对数组执行计算,而不需要额外的内存来存储数据的临时副本。例如,以下代码对大型矩阵中的数据归一化,然后计算所有行和列的总和。该计算的内存版本不仅需要存储数组,还需要有足够的可用内存来创建数组的临时副本。

N = 5000;
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 0.49 sec
- Pass 2 of 2: Completed in 0.57 sec
Evaluation completed in 1.7 sec
S = -1.0004e-11

如果调整 N 的值,使得有足够的内存来存储 tA 但没有足够的内存来存储其副本,计算仍会成功执行。

输入参数

全部折叠

输入数据存储,指定为数据存储对象。有关为数据集创建数据存储对象的详细信息,请参阅数据存储

tall 数组仅适用于确定性数据存储。也就是说,如果对数据存储使用 read,继而使用 reset 重置数据存储,然后再次读取数据存储,则这两种读取方式返回的数据必须相同。涉及不确定的数据存储的 tall 数组计算会产生不可预测的结果。有关详细信息,请参阅Select Datastore for File Format or Application

示例: ds = tabularTextDatastore('airlinesmall.csv') 指定单个文件。

示例: ds = tabularTextDatastore('*.csv') 指定 .csv 文件的集合。

示例: ds = spreadsheetDatastore('C:\MyData') 指定电子表格文件的文件夹。

示例: ds = datastore('hdfs:///data/') 指定 HDFS 文件系统中的数据集。

内存变量,指定为数组。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | table | timetable | string | cell | categorical | datetime | duration | calendarDuration
复数支持:

输出参数

全部折叠

tall 数组,返回为下列类型之一:

  • 转换数据存储时,t 是表格数据存储的 tall 表或 tall 时间表。否则,t 是一个 tall 元胞数组。

  • 转换内存数组时,t 的基本数据类型与 class(A) 相同。

有关如何高效使用 tall 数组的信息,请参阅 Lazy Evaluation of Tall Arrays

提示

  • 请参阅Extend Tall Arrays with Other Products,了解有关如何将 tall 数组与以下产品一起使用的信息:

    • Statistics and Machine Learning Toolbox™

    • Parallel Computing Toolbox™

    • MATLAB Parallel Server™

    • Database Toolbox™

    • MATLAB Compiler™

扩展功能

tall 数组
对行数太多而无法放入内存的数组进行计算。

版本历史记录

在 R2016b 中推出