我不太确定这是否可行,但我对MATLAB的理解肯定会更好.
我有一些代码我希望矢量化,因为它在我的程序中造成了相当大的瓶颈.它是优化程序的一部分,它具有许多可能的短期平均(STA),长期平均(LTA)和灵敏度(OnSense)配置.
时间是矢量格式,FL2onSS是主数据(一个Nx1双),FL2onSSSTA是它的STA(NxSTA双),FL2onSSThresh是它的阈值(NxLTAxOnSense double)
我们的想法是计算一个红色警报矩阵,该矩阵将是4D - 在整个程序的其余部分使用的alarmStatexSTAxLTAxOnSense.
Red = zeros(length(FL2onSS), length(STA), length(LTA), length(OnSense), 'double');
for i=1:length(STA)
for j=1:length(LTA)
for k=1:length(OnSense)
Red(:,i,j,k) = calcRedAlarm(Time, FL2onSS, FL2onSSSTA(:,i), FL2onSSThresh(:,j,k));
end
end
end
Run Code Online (Sandbox Code Playgroud)
我现在已经重复了一个函数,试图从中获得更高的速度,但显然如果整个事物可以被矢量化会更好.换句话说,如果有更好的解决方案,我不需要保留该功能.
function [Red] = calcRedAlarm(Time, FL2onSS, FL2onSSSTA, FL2onSSThresh)
% Calculate Alarms
% Alarm triggers when STA > Threshold
zeroSize = length(FL2onSS);
%Precompose
Red = zeros(zeroSize, 1, 'double');
for i=2:zeroSize
%Because of time chunks being butted up against each other, alarms can
%go off when they shouldn't. To fix this, timeDiff has …Run Code Online (Sandbox Code Playgroud) 我有一个正常运行的 Rust 程序,使用实双精度数 ( f64) 作为基础类型,并希望扩展系统,以便它也可以处理复杂值 ( num::complex::Complex64)。
一个(简化示例)函数采用一些配置 struct config,并根据该输入在索引处生成一个潜在值idx:
fn potential(config: &Config, idx: &Index3) -> Result<f64, Error> {
let num = &config.grid.size;
match config.potential {
PotentialType::NoPotential => Ok(0.0),
PotentialType::Cube => {
if (idx.x > num.x / 4 && idx.x <= 3 * num.x / 4) &&
(idx.y > num.y / 4 && idx.y <= 3 * num.y / 4) &&
(idx.z > num.z / 4 && idx.z <= 3 * num.z / 4) …Run Code Online (Sandbox Code Playgroud)