小编Geo*_*sic的帖子

在MATLAB中矢量化循环

我不太确定这是否可行,但我对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)

performance matlab vectorization

4
推荐指数
1
解决办法
1484
查看次数

处理 f64 或 Complex64 返回类型。泛型?任何一个?

我有一个正常运行的 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)

generic-programming either rust

2
推荐指数
1
解决办法
242
查看次数