将矩阵的每一行转移到结构的字段
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
) 的计算开销。
我有一个 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
) 的计算开销。