如何连接/分配不同长度的字符串到现有的Matlab表?

时间:2017-10-19 13:39:20

标签: matlab concatenation

在Matlab中考虑table

a = table(); 
a.c = 'a';

如何在该表中添加一行包含不同长度的字符串?我想得到:

c  
______  

'a'     
'aa'

例如,这种简单的尝试会产生错误:

b = table(); 
b.c = 'aa';
result = [a; b] 

错误:

  

无法连接表变量' c'使用VERTCAT。    引起:       使用vertcat时出错       连接的矩阵的尺寸不一致。

2 个答案:

答案 0 :(得分:1)

由于MATLAB的table个对象如何处理包含的数据,它会尝试使用数据类型。偶尔当事情在幕后变得聪明时,他们会以一种对用户来说不一定明显的方式绊倒。

这里发生的事情是,由于您的c列是使用字符数组创建的,因此MATLAB会尝试使此列保持同源并将'a''aa'连接起来。由于MATLAB将character arrays作为字符矩阵处理,这会导致错误输出,这会带来大小强制:所有行必须具有相同的列数。

您有几个选择:使用string array(在R2016b中引入),或使用cell array。虽然字符串数组本质上是单元格数组,但它们具有专用字符串方法的优点,允许您本机执行各种字符串操作,而无需显式索引到单元格数组。

要更改代码,只需使用双引号("")而不是单引号(''):

a = table(); 
a.c = "a";
b = table();
b.c = "aa";

T = [a;b]

返回:

T =

  2×1 table

     c  
    ____

    "a" 
    "aa"

或者,您可以明确强制c的类型为单元格数组:

a = table(); 
a.c = {'a'};
b = table();
b.c = 'aa';

T = [a; b]

返回相同的内容。

答案 1 :(得分:1)

如果您有整列数据,可以从单元格数组

创建一列
tbl = table();
tbl.mycol = {'some text'; 
             'something else';
             'third item'};

如果你想附加一个项目(比如在循环中)你可以做

tbl = table();
mycell = {'some text'; 
          'something else';
          'third item'};
tbl.mycol = {};
for ii = 1:numel(mycell)
    tbl.mycol(ii) = mycell(ii);
end

同样,你可以像数组

一样追加到最后
tbl.mycol(end+1) = {'fourth item'};

您可以通过使用vertcat

连接两个表来合并它们
myothercell = {'append this';
               '...and this'};
tbl1 = table();
tbl1.mycol = mycell;
tbl2 = table();
tbl2.mycol = myothercell;

tbl3 = vertcat(tbl1, tbl2);