将矩阵的每一行转移到结构的字段

时间:2015-01-29 16:18:01

标签: matlab structure vectorization

我有一个100乘2的矩阵。我想将此矩阵的每一行转移到结构的字段而不使用循环。对于循环解决方案:

% Let's say
matrix = rand(100,2);
for ii = 1: size(matrix,1)
    str(ii).field = matrix(ii,:);
end

提前致谢。

1 个答案:

答案 0 :(得分:4)

您可以使用结构数组和单元数组的comma-separated性质:

nRow   = 100;
nCol   = 2;
matrix = rand(nRow,2);

% Chunk the matrix into a 100x1 cell array of 1x2 entries
matrixCell = mat2cell(matrix,ones(1,nRow),nCol);

% Pre-allocate and splay the entries into the struct array
str(nRow).field = [];
[str(:).field]  = matrixCell{:};

根据下面的Divakar评论,您还可以使用struct函数本身直接创建数组:

str = struct('field',matrixCell);

只需注意效率(就运行时而言),预先分配struct数组然后用循环填充它是最快的解决方案:

str(nRow).field = [];
for k = 1:nRow
    str(k).field = matrix(k,:);
end

这种方法的速度几乎是前两种方法的10倍,这主要是由于创建单元阵列(mat2cell)的计算开销。