我对Matlab很新,我觉得使用数组完全不知所措.在Matlab中最有效的以下C++代码实现是什么?
A = std::vector<double>();
for (int i = 0; i < 100; i++) {
if (complicatedBoolFunction(i)) {
A.push_back(i);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:效率我的意思是使用尽可能少的资源来增长阵列A - 也就是说,避免将其复制粘贴到临时内存中
你可以这两种方式做到这一点
预分配最大大小,并删除未使用的元素.这具有在经常满足条件的情况下预分配存储器的优点......
A = NaN(100,1)
for ii = 0:99
if rand > 0.5 % some condition
A(ii+1) = ii; % some value
end
end
A(isnan(A)) = []; % remove unused elements
Run Code Online (Sandbox Code Playgroud)附加到数组.A如果附加不太可能,这可以避免过大...
A = []; % empty array
for ii = 0:99
if rand > 0.5 % some condition
A(end+1, 1) = ii; % some value. Equivalent to 'A = [A; ii];'
end
end
Run Code Online (Sandbox Code Playgroud)一个更好的,更Matlab式的方法是对你的条件函数进行矢量化.这样可以避免循环和分配问题......
ii = 0:99;
A = ii(rand(100, 1) > 0.5);
Run Code Online (Sandbox Code Playgroud)
您可以使用任何您喜欢的布尔函数作为索引数组,只要它返回一个逻辑数组,其元素数量与您要索引的数组(ii此处)或要选择的元素的整数索引相同.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |