如何将单元格数组中的一个元素与跨行的其他元素连接起来?
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
。试验这些方法以更好地理解它们的功能。
我有一个维度为 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
。试验这些方法以更好地理解它们的功能。