Matlab效率-矢量化

约翰

我有运行的Matlab代码,但我想通过删除for循环使其更快,并且基本上只使用矩阵进行相同的计算(我的数据集非常大,所以我需要这种优化):

Matrices dimensions: x(N,D), m(K,D), p(K), fL(N,K), maxf(N), maxfL(N), z(N,K).
Also p, maxf, maxfL are row vectors

代码1:

f = zeros(N,K);
maxf = zeros(1,N);

for n=1:N
   for k=1:K
      % here i had a loop for d dimension but made it more efficient like this:
      f2 = x(n,:) * log(m(k,:))' + (1 - x(n,:)) * log(1 - m(k,:))';
      f(n,k) = log(p(k)) + f2;
   end
   maxf(n) = max(f(n,:));
   f(n,:) = f(n,:) - maxf(n);
end

代码2:

for k=1:K
  sum2 = sum(z(:,k)); 
  p(k)= sum2/N;
  for d=1:D
     % here i had a n loop for sum1 and made it like this:
     sum1 = z(:,k)' * x(:,d); 
     m(k,d) = sum1/sum2;
  end
end

代码3:

L_new = 0;
for n=1:N
  suma = sum(fL(n,:));
  L_new = L_new + maxfL(n) + log(suma);
end

现在,我将在工作量中使用以下提供的答案来总结一些平均执行时间(结果以秒为单位)(N = 1000,K = 2,D = 784):

CodeNumber                      Execution Time
    1           3.98(for_loops), 1.01(Divakar), 0.5(Nishant)
    2           0.2(for_loops), 0.40-0.42(Divakar-2 approaches), 0.13(Nishant)
    3           0.03(for_loops), 0.0026(Divakar), 0.0024(Nishant)

感谢您的回答!

西信

对于代码1:

f2 = x*log(m)' + (1-x)*(log(1-m))' ;
f = f2 + ones(N,1)*log(p);
maxf = max(f');
f = f - maxf'*ones(1,K);

对于代码2:

sum2 = sum(z);
sum1 = z'*x;
temp = sum2'*ones(1,D);
m = sum1./temp;
p  = sum2/N;  

对于代码3:

L_new = sum(log(sum(fL'))) + sum(maxfL');

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Matlab效率-矢量化

来自分类Dev

MATLAB bsxfun或矢量化

来自分类Dev

Matlab矢量化的for循环

来自分类Dev

Matlab矢量化矢量创建

来自分类Dev

Matlab矢量化矢量创建

来自分类Dev

Matlab创建矢量化序列

来自分类Dev

MATLAB / Octave循环的矢量化

来自分类Dev

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

来自分类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中切除图像堆栈的视图