作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码,如果可能的话,我有兴趣将其从 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/
我是一名优秀的程序员,十分优秀!