我需要连接几个更大的矩阵,但要以特定的方式 - 例如,仅连接 X 矩阵中的 1 行。有一个很好的解决方案,将数据存储在结构中,因此无需准备需要连接的长列表。
例如,我们将有一个这样的结构:
struct(1).huge = [1 2 3 4; 1 2 3 4];
struct(2).huge = [1 2 3 4; 1 2 3 4];
struct(3).huge = [1 2 3 4; 1 2 3 4];
然后我们可以将它们与以下连接起来:
concatVar.concat = vertcat(struct.huge);
而不是,例如:
concatVar.concat = vertcat(struct(1), struct(2),(...),struct(100));
但是,如果我只需要连接结构中不同字段中的特定行,例如仅连接 1 行,该怎么办:
concatVar.concat = vertcat(struct.huge(1,:));
那么此方法将不起作用,并出现错误:
"预计大括号或点索引表达式有一个输出,但有 X 个结果"。
甚至有可能使用 vertcat 或 horzcat 以快速可靠的方式做这样的事情吗?
感谢您的任何建议!唰唰��
很难避免循环。您可以将结构的字段转换为单元格,然后使用 cellfun
,这本质上是一个循环。
让您的结构定义如下。请注意,不建议使用函数名称或保留字(如 struct
(作为变量名称。
s(1).huge = [1 2 3 4; 1 2 3 4];
s(2).huge = [1 2 3 4; 1 2 3 4];
s(3).huge = [1 2 3 4; 1 2 3 4];
然后:
result = cell2mat(cellfun(@(x) x(1,:), {s.huge}, 'uniformoutput', false).');