matlab中的单元格到矩阵转换

时间:2015-10-14 17:34:10

标签: arrays regex matlab matrix cell-array

我想将三个<1xN cell>ABC)转换为单个Nx3矩阵。有人可以帮我这个吗?

C={{1xN}; {1xN}; {1xN}};

其中每个N是单引号中的数字,例如

C = {{'123123' ,'12324', ....N times}; {'123123', '12324', ....N times}; {'123123', '12324' ,....N times}}

由于他们中的一些人提到了荒谬的输入,所以这就是上述形式的原因。

三个嵌套的单元格数组是正则表达式的结果,其中我的字符串和表达式都是字符串。因此,我将regexp的输出作为行向量的三个单元阵列。 例如,

node_ids=regexp(nodes,'(?<=node id=")\d*','match');

我可以使用cat函数,然后对所有三个单元格数组使用str2double,最后通过cell2mat形成一个矩阵。 例如,

node_ids=cat(1,node_ids{:});node_ids=str2double(node_ids);

但这需要更多时间并且有更多LOC。 我的问题是可以用更少的代码行完成吗?

我尝试使用cat函数,但一直收到此错误:

  

不支持包含单元格数组或对象的单元格数组。

1 个答案:

答案 0 :(得分:1)

您的输入数据非常糟糕....为什么使用嵌套的单元格数组,其中每个元素都是一个字符串?

在任何情况下,假设C是您的原始输入数据,请执行以下操作:

C = {{'123123' '12324'}; {'123123' '12324'}; {'123123' '12324'}};
out = cellfun(@(x) cellfun(@str2num, x, 'uni', 0), C, 'uni', 0);
out = cell2mat(cellfun(@cell2mat, out, 'uni', 0));

第一行是一些虚拟数据。下一行首先遍历单元格数组上的每个嵌套单元格元素,然后将字符串转换为数字。但是,这些仍然在单元阵列中。因此,下一行将嵌套单元格中的每个单元格数组转换为矩阵,然后我们将所有单元格合并为一个最终矩阵。

我们得到:

>> out

out =

      123123       12324
      123123       12324
      123123       12324