matlab中的元胞数组到矩阵的转换

Cell array to matrix conversion in matlab

我想将三个 <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 函数,但一直出现此错误:

Cannot support cell arrays containing cell arrays or objects.

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

无论如何,假设 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