如何将单元格数组中的一个元素与跨行的其他元素连接起来?

How to concatenate one element with other across rows in a cell array?

我有一个维度为 64x8 的元胞数组 C,其中每一行都包含以下维度,

说,

10x26 double    10x26 double    10x26 double    10x26 double    10x26 double    10x26 double    10x26 double    10x26 double

我使用以下命令将元胞数组的每个元素转换为矩阵,

D = cellfun(@(x) {x(:)}, C);

这给了我以下输出,

260x1 double    260x1 double    260x1 double    260x1 double    260x1 double    260x1 double    260x1 double    260x1 double

现在,我需要水平连接元胞数组 8 行中的每个 260x1 元素,这样我会得到一个

2080x1 dimension-ed value in a single cell

其中 2080 是 260x8(8 行)的乘积。这应该将 64x8 元胞数组转换为 64x1 数组。

所以我必须得到如下所示的输出,

2080x1
2080x1
......
......
......
2080x1

我希望不能使用 cellfun,因为它将函数应用于元胞数组的每个元素。但我需要连接元胞数组本身的元素,如果有没有循环的方法也请告诉我。

这里的技巧是使用vertcat:

array = vertcat(cellArray{:});

{:} 部分 returns 所有单元格的内容作为输出列表,vertcat 将这些作为输入并沿第一个维度将它们连接起来。如果你想沿着第二个维度连接,你可以使用 horzcat, and if you wanted to concatenate along some other dimension you can use the general cat.

horzcat(A, B, ...)vertcat(A, B, ...) 分别是语法 [A, B, ...][A; B; ...] 的函数形式。

请注意,您也可以在原始 C 上使用这些函数,而无需像以前那样使用 cellfun。试验这些方法以更好地理解它们的功能。