gpt4 book ai didi

matlab - 有没有办法将结构(:). a(:, 1)矢量化为数组(:, :)?

转载 作者:行者123 更新时间:2023-12-02 15:16:23 25 4
gpt4 key购买 nike

我有以下代码,如果可能的话,我有兴趣将其从 for 循环转换为向量运算。前提是给定一个结构数组data,每个元素都有一个字段a,其中包含一个列向量。所有字段 a 上的所有列向量的长度相同。我想从所有字段中获取每个列向量并将数据转换为一个矩阵,其中每一列包含来自该数组中字段 a 的一个列向量。这意味着第一列应该是 data(1).a,第二列应该是 data(2).a 等等。

    % All arrays in 'data.a' are column vectors of equal length
% (leaving 'numCols' in incase some genius can also make that general)
[numRows,numCols] = size(data(1).a);

% Pre-allocate for speed
array1 = NaN(numRows,numCols);

% Convert from struct to array
for ii = 1:length(data)
array1(:,ii) = data(ii).a;
end

最佳答案

是的。只是做:

array1 = [data.a];

这很好,因为您甚至不需要知道列向量的大小或为了构建预分配矩阵而产生的总列数(总列数实际上等于顺便说一句,结构数组中的元素总数)。事实上,由于我们直接构建矩阵,因此不再需要预分配。您同时创建了适量的空间并在一个步骤中用内容填充了矩阵。这是因为我们正在利用以下事实:data(ii).a 包含单个列,并且结构数组中 a 字段的所有列都包含相同数量的存储在字段 a 中的列向量中的行。

执行 data.a 输出所谓的 comma-separated list .这意味着执行 data.a 相当于在 MATLAB 命令提示符中键入以下内容:

>> data(1).a, data(2).a, data(3).a, ..., data(N).a

如果您将 data.a 放在一组方括号中,您实际上是在构建一次查找一列的矩阵。

一个可重现的例子

>> rng(123); clear data;
>> data(1) = struct('a', rand(5, 1));
>> data(2) = struct('a', rand(5, 1));
>> data(3) = struct('a', rand(5, 1));

data 包含一个三元素结构数组,其字段 a 包含随机 5 x 1 列向量。

这是每个向量的样子:

>> for ii = 1 : numel(data), disp(data(ii).a); end

0.6965
0.2861
0.2269
0.5513
0.7195

0.4231
0.9808
0.6848
0.4809
0.3921

0.3432
0.7290
0.4386
0.0597
0.3980

使用我给你的单行代码:

>> array1 = [data.a]

array1 =

0.6965 0.4231 0.3432
0.2861 0.9808 0.7290
0.2269 0.6848 0.4386
0.5513 0.4809 0.0597
0.7195 0.3921 0.3980

关于matlab - 有没有办法将结构(:). a(:, 1)矢量化为数组(:, :)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40117895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com