【问题标题】:Extracting multiple subtables from a large(ish) database in MATLAB从 MATLAB 中的大型(ish)数据库中提取多个子表
【发布时间】:2014-06-28 12:04:10
【问题描述】:

我对 matlab 很陌生,所以我可能会遗漏一些非常明显的东西。

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

对我来说,一次简单地取出二十行矩阵并将其放入自己独特的矩阵中的最佳函数是什么?

对不起,如果这很明显。我环顾四周,但似乎没有任何东西可以回答我的问题。作为记录,我很擅长编程。刚接触 matlab。

谢谢!

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    对我来说,一次简单地取二十行矩阵并将其放入自己独特的矩阵中的最佳函数是什么?

    您可以使用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 矩阵,如图所示。

    【讨论】:

    • 感谢您的回答!我现在就试试看!每次调用代码时如何使新数组名称唯一?
    • 你能澄清一下你的意思吗?你可以chunk2 = C{2},但我不确定你问的是什么。
    • 好吧,我将为每个潜水实例迭代地运行此代码。所以我不能只使用 C,因为它会被下一个潜水实例覆盖。谢谢!
    • @user3760248 啊,我明白了。在这种情况下,您可以将包含块(您的Cs)的元胞数组存储在另一个元胞数组中。
    • 啊,好吧!太棒了!我真的很感谢你的帮助。谢谢!
    【解决方案2】:

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

    % 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
    

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

    【讨论】:

    • 感谢您的回答!我现在就去试试!
    猜你喜欢
    • 2011-04-18
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2020-08-01
    相关资源
    最近更新 更多