使用vertcat和自定义行连接复杂数据的快速方法

问题描述 投票:1回答:1

我需要连接几个更大的矩阵,但是以特定的方式 - 例如,从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以快速可靠的方式做类似的事情吗?

谢谢你的建议! BM

matlab data-structures concatenation concat
1个回答
3
投票

在这种情况下似乎很难避免循环。您可以将struct的字段转换为单元格,然后使用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).');
© www.soinside.com 2019 - 2024. All rights reserved.