我有一个100乘2的矩阵。我想将此矩阵的每一行转移到结构的字段而不使用循环。对于循环解决方案:
% Let's say
matrix = rand(100,2);
for ii = 1: size(matrix,1)
str(ii).field = matrix(ii,:);
end
提前致谢。
答案 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
)的计算开销。