代码之家  ›  专栏  ›  技术社区  ›  SugaKookie

MATLAB将单元格转换为双单元格,并将其连接或重塑为一列

  •  0
  • SugaKookie  · 技术社区  · 10 年前

    我将lat和lon作为大小为1x7的单元格(在每个单元格中,单元格是一列,行数不同)。我想将7列中的每一列转换为两倍,然后将它们连接成一列,这样我就得到了一个大小为216x1的矩阵。

    例如(缩短版本),如果

     lat{1,1}
    '40.400959'
    '40.695078'
    '40.969112'
    '41.264171'
    '41.400968'
    '41.517772'
    '41.530011'
    '41.550005'
    '41.583183'
    '41.603159'
    
     lat{1,2}
    '38.082155'
    '38.176278'
    '38.529631'
    '38.612034'
    '38.700632'
    

    然后,我想以双重形式: 40.400959 40.695078 40.969112 41.264171 41.400968 41.517772 41.530011 41.550005 41.583183 41.603159 38.082155 38.176278 38.529631 38.612034 38.700632

    我成功地转换为double,但我不知道如何将列部分连接(或重塑)。

    for i = 1:7
        lat = str2double(lat_PM25{i});
        lon = str2double(lon_PM25{i});
    end
    
    1 回复  |  直到 10 年前
        1
  •  4
  •   Luis Mendo    10 年前

    使用此项:

    str2double(vertcat(lat{:}))
    

    这是如何工作的 :

    lat{:} 提供了一个以逗号分隔的单元格内容列表。每个单元格内容依次是字符串的单列单元格数组(我假设)。

    vertcat 将所有这些字符串的单列单元格数组连接到一个字符串的单列单元数组中。

    str2double 将每个字符串转换为 double number,并将所有这些数字打包成列向量。

    实例 :

    lat{1,1} = {
    '40.400959'
    '40.695078'
    '40.969112'
    '41.264171'
    '41.400968'
    '41.517772'
    '41.530011'
    '41.550005'
    '41.583183'
    '41.603159'};
    
    lat{1,2} = {
    '38.082155'
    '38.176278'
    '38.529631'
    '38.612034'
    '38.700632'};
    

    给予

    ans =
       40.4010
       40.6951
       40.9691
       41.2642
       41.4010
       41.5178
       41.5300
       41.5500
       41.5832
       41.6032
       38.0822
       38.1763
       38.5296
       38.6120
       38.7006