在MATLAB中从大型(ish)数据库中提取多个子表

时间:2014-06-28 12:04:10

标签: matlab matrix

我对matlab很新,所以可能会有一些令人目眩的明显缺失的东西。

基本上,我有一个大的数据集矩阵(170k x 15),我需要从中提取相对大量的子表。这是一只潜入大海的鸟的8小时传感器数据。我需要隔离每只潜入大海的鸟类。幸运的是,其中一个传感器是一个压力传感器,它使整个事情变得更加容易,但我的问题是,一旦我通过数据迭代找到压力传感器的实例上升,我就计算了“潜水”的长度和范围,我不知道将矩阵的这个提取复制到它自己的单独集合中的最佳方法。

我可以使用哪种方法最简单地一次取20行矩阵并将其放入自己独特的矩阵中?

很抱歉,如果这很明显。我好好环顾四周,但似乎没有回答我的问题。为了记录,我对编程很满意。刚认真对待matlab。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您知道要提取的矩阵行,并且您想要所有列数据,那么只需执行类似

的操作
% create a 25x25 matrix
A = magic(25);

% grab rows 12 through 23
subA = A(12:23,:);

在上面,我们指定了我们想要的行数(12:23)和所有列(:)。

如果您想创建一组这些潜水,并且您希望每次潜水都有不同的行数,您可以将子集放入一个单元格阵列

dives  = {};
atDive = 1;

% iterate over data
for k=1:length(A)

     % if found dive start and end, extract and put into cell array
      dives{atDive} = A(diveStart:diveEnd,:);
      atDive        = atDive + 1;

end

上述内容可用于存储所有潜水以供进一步分析。试一试,看看会发生什么!

答案 1 :(得分:0)

  

我可以使用哪种方法最简单地一次取20行矩阵并将其放入自己独特的矩阵中?

您可以使用mat2cell。对于20行的块大小,您可以发出:

C = mat2cell(M,repmat(20,1,size(M,1)/20)) 

其中M是您的原始矩阵。演示大小为4:

>> M
M =
  144     2     3
   13   131   130
   25   119   118
  108    38    39
   96    50    51
   61    83    82
   73    71    70
   60    86    87
   48    98    99
  109    35    34
  121    23    22
   12   134   135
>> chunksize = 4;
>> C = mat2cell(M,repmat(chunksize,1,size(M,1)/chunksize)) 
C = 
   [4x3 double]
   [4x3 double]
   [4x3 double]
>> C{2}
ans =
   96    50    51
   61    83    82
   73    71    70
   60    86    87

C的每个单元格将包含一个4x3矩阵,如图所示。