MATLAB bsxfun或矢量化

基思·D

我一直在主要使用bsxfun对代码进行矢量化处理,但是遇到了无法完全破解的情况。这是问题的一小部分。我想删除这段代码中的for循环,但是在tempEA行上遇到了麻烦。

Index = [2; 3; 4;];

dTime = [25; 26; 27; 28; 25; 26; 27; 28; 27; 28];
dIndex = [3; 3; 3; 2; 1; 3; 2; 4; 4; 2];
aTime = [30; 38; 34; 39; 30; 38; 34; 39; 34; 39];
aIndex = [4; 2; 5; 4; 5; 4; 4; 2; 2; 4];

EA = zeros(numel(Index));
for i = 1:numel(Index)
    for j = 1:numel(Index)
        tempEA = aTime(Index(i) == dIndex(:,1) & Index(j) == aIndex(:,1));
        if i == j
        elseif tempEA > 0
            EA(i,j) = min(tempEA);
        else
            EA(i,j) = 50;
        end
    end
end

答案应如下所示:

EA =

     0    50    34
    38     0    30
    34    50     0

预先感谢您的帮助。

路易斯·门多

这使用bsxfun; 没有循环。假设您NaNaTime价值观中没有。

N = numel(Index);
ii = bsxfun(@eq, dIndex.', Index); %'// selected values according to each i
jj = bsxfun(@eq, aIndex.', Index); %'// selected values according to each j
[ igrid jgrid ] = ndgrid(1:N); %// generate all combinations of i and j
match = double(ii(igrid(:),:) & jj(jgrid(:),:)); %// each row contains the matches for an (i,j) combination
match(~match) = NaN; %// these entries will not be considered when minimizing
result = min(bsxfun(@times, aTime, match.')); %'// minimize according to each row of "match"
result = reshape(result,[N N]);
result(isnan(result)) = 50; %// set NaN to 50
result(result<=0) = 50; %// set nonpositive values to 50
result(1:N+1:end) = 0; %// set diagonal to 0

result(result<=0) = 50;仅当您aTime可以包含非正值时,才需要该行它可以?还是您elseif tempEA > 0只是检查tempEA不为空的一种方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Matlab效率-矢量化

来自分类Dev

Matlab效率-矢量化

来自分类Dev

Matlab矢量化的for循环

来自分类Dev

Matlab矢量化矢量创建

来自分类Dev

Matlab矢量化矢量创建

来自分类Dev

Matlab创建矢量化序列

来自分类Dev

MATLAB / Octave循环的矢量化

来自分类Dev

矢量化代码比循环慢?的MATLAB

来自分类Dev

自相关MATLAB循环的矢量化

来自分类Dev

用Matlab进行矢量化编程

来自分类Dev

矢量化代码比Matlab中的for循环慢

来自分类Dev

在MATLAB中使用If语句进行可能的矢量化

来自分类Dev

Matlab面向对象的程序设计矢量化

来自分类Dev

矢量化三重循环-MATLAB

来自分类Dev

MATLAB中函数数组的矢量化或单行评估

来自分类Dev

Matlab中单个循环的矢量化(相乘然后相加)

来自分类Dev

Matlab在矢量化代码中进行调整

来自分类Dev

MATLAB:对3D数组进行矢量化填充

来自分类Dev

Matlab代码的矢量化,可以更快地执行

来自分类Dev

矢量化代码比Matlab中的for循环慢

来自分类Dev

在Chebfun中使用Matlab Meshgrid进行矢量化

来自分类Dev

在 MATLAB 中矢量化包含 circshift 的多个嵌套循环

来自分类Dev

MATLAB:在两个矩阵上应用函数的有效(矢量化)方法?

来自分类Dev

在Matlab中嵌套循环中对更高维度进行矢量化

来自分类Dev

在MATLAB中计算PSTH(蠕动时间直方图)的矢量化方法

来自分类Dev

如何在Matlab中对结构进行矢量化处理?

来自分类Dev

如何在MATLAB中矢量化这些while并嵌套for循环?

来自分类Dev

矢量化在Matlab中切除图像堆栈的视图

来自分类Dev

在MATLAB中计算x,x。^ 2,... x。^ K(幂矢量化,几何级数)