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

transfer each row of a matrix to the field of a structure

我有一个 100 x 2 的矩阵。我想在不使用循环的情况下将该矩阵的每一行传输到结构的字段。 For循环解决方案:

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

提前致谢。

您可以使用结构数组和元胞数组的 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);

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

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

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