使用 vertcat 与自定义行连接复杂数据的快速方法
Fast way of concatenating complex data using vertcat with custom rows
我需要连接几个更大的矩阵,但要以特定方式连接 - 例如仅连接 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,:));
那么这个方法就不行了,报错:
"Expected one output from a curly brace or dot indexing expression, but there were X results".
是否有可能通过使用 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).');
我需要连接几个更大的矩阵,但要以特定方式连接 - 例如仅连接 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,:));
那么这个方法就不行了,报错:
"Expected one output from a curly brace or dot indexing expression, but there were X results".
是否有可能通过使用 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).');