Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab-将数据从多个单元阵列移动到一个主单元阵列_Matlab_Multidimensional Array_Cell - Fatal编程技术网

Matlab-将数据从多个单元阵列移动到一个主单元阵列

Matlab-将数据从多个单元阵列移动到一个主单元阵列,matlab,multidimensional-array,cell,Matlab,Multidimensional Array,Cell,我有一个数据集,由大约1000个150万行文件组成,每个文件有6列。这些文件来自大约50个气象站。理论上,所有电台都是时间同步的。我已经将50个站点的数据存储在Matlab中的单元阵列中。每个工作站都有一个与文件相对应的单元阵列单元阵列。也就是说,站1位于cell array#1中,cell array#1具有与文件数对应的X个cell array。然后每一个都包含实际数据。 我想把所有的数据放在一个位置,第一列是“时间”,另外50列是站点。我不需要6列中的所有数据。然而 我的策略是创建一个单元

我有一个数据集,由大约1000个150万行文件组成,每个文件有6列。这些文件来自大约50个气象站。理论上,所有电台都是时间同步的。我已经将50个站点的数据存储在Matlab中的单元阵列中。每个工作站都有一个与文件相对应的单元阵列单元阵列。也就是说,站1位于cell array#1中,cell array#1具有与文件数对应的X个cell array。然后每一个都包含实际数据。 我想把所有的数据放在一个位置,第一列是“时间”,另外50列是站点。我不需要6列中的所有数据。然而 我的策略是创建一个单元格数组,其中有一列包含所有可能的时间,后跟50个空列,数据将放入其中。然后我查看每个文件,找到时间的交点,从文件和新数组中获取索引,并将数据转储到数组中

我用于进行转换的代码如下所示:

% One-second time data in datenum format

    times = datenum(2011,11,20,0,0,0:TotalSeconds)';

    % The number of files associated with each station

    AllLengths = cellfun(@length,TotalData);

% Preallocating irradiance cell array

    IrradianceData = cell(length(times),length(AllLengths)+1);

% Loop through the times (November 20, 2011, 00:00:00 to present) and find common times from the data


for ii = 1:length(AllLengths)

    for jj = 1:AllLengths(ii)
         % This finds the indices of the times within the station file
        [~,IdxData,Idxtimes] = intersect(TotalData{ii,1}{jj,1}(:,1),times);

         % This adds the irradiance values to another cell array
         % Can I do this more efficiently?

        for kk = 1:length(Idxtimes)
        IrradianceData{Idxtimes(kk),ii+1} = TotalData{ii,1}{jj,1}(IdxData(kk),5);
        end
    end

end 

有没有办法搜索数据文件,并以矢量化方式将相关数据添加到单元格数组中?现在设置的方式非常慢。如果有任何建议,我将不胜感激。

有什么原因吗
辐照度数据是一个单元格而不是两倍?更改可能会加快速度。您是否知道1e3*1.5e6*(8字节)~11.18 GB?若你们有一个64位的操作系统,你们可能会在磁盘上交换,这会使事情变得非常缓慢。我通常用我的电脑来完成这些任务。如果您在第一列中有站点id,然后在第二列中有时间戳和一列测量值,它将自动形成一个矩阵,并对id和时间戳相交的数据应用一些函数(默认情况下求和)@nhowe-I将所有数据存储为单元数组,因为数据集长度可变。数据本身以双精度存储。例如:TotalData{1,1}{1,1}是86012x5双精度。还有什么我应该做的吗?@Oleg Komarov-pivot实用程序看起来很有希望。我预计,当我在Matlab中运行完整的数据集时,我将在30GB的范围内。我有一个16 GB内存的64位操作系统,所以我将进行交换。实际上,我试图创建一个文件,打开它进行编辑,并用数据填充它。事实证明,这很有挑战性,但并非不可能。我可能会在将来尝试。实际上,我建议将数据存储在适当的DMB中,然后使用SQL等执行您需要的选择,并仅将您需要的数据导入MATLAB。我经常发现,我在大型数据集上使用MATLAB执行的许多简单任务都可以在数据库中轻松快速地完成!