octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Why NDArray is faster than int32NDArray?


From: Hamid 2C
Subject: Why NDArray is faster than int32NDArray?
Date: Tue, 26 Jul 2011 23:17:14 +0430

> On 26 July 2011 13:35, Hamid 2C <address@hidden> wrote:
>> I have coded two different version of array multiplication in C++
>> using Octave library.
>
> src plz
>
// mymultreal.cpp where NDArray is used.
#include <octave/oct.h>
#include <iostream>
#include <cstdlib>
DEFUN_DLD (mymultreal, args, nargout, "") {
octave_value_list retval;

   NDArray x=args(0).array_value();
   NDArray y=args(1).array_value();
   int d1x = x.rows();
   int d2x = x.columns();
   int d1y = y.rows();
   int d2y = y.columns();
   if ((d2x != d1y)) {
       std::cout<<"error"<<"incompatible dimensions"<<"\n";return retval;
   }
   NDArray z(dim_vector( d1x,  d2y));
   int i;
   int j;
   int k;
   for (i = (0); i <= (d1x - 1); i += (1)) {
       for (j = (0); j <= (d2y - 1); j += (1)) {
           z.xelem(i, j) = 0;
           for (k = (0); k <= (d1y - 1); k += (1)) {
               z.xelem(i, j) = z.xelem(i, j) + x.xelem(i, k) * y.xelem(k, j);
           }
       }
   }
   retval(0) = z;
   return retval;
}

//mymult.cpp
#include <octave/oct.h>
#include <iostream>
#include <cstdlib>
DEFUN_DLD (mymult, args, nargout, "") {
octave_value_list retval;

   int32NDArray x=args(0).int32_array_value();
   int32NDArray y=args(1).int32_array_value();
   int d1x = x.rows();
   int d2x = x.columns();
   int d1y = y.rows();
   int d2y = y.columns();
   if ((d2x != d1y)) {
       std::cout<<"error"<<"incompatible dimensions"<<"\n";return retval;
   }
   int32NDArray z(dim_vector( d1x,  d2y));
   int i;
   int j;
   int k;
   for (i = (0); i <= (d1x - 1); i += (1)) {
       for (j = (0); j <= (d2y - 1); j += (1)) {
           z.xelem(i, j) = 0;
           for (k = (0); k <= (d1y - 1); k += (1)) {
               z.xelem(i, j) = z.xelem(i, j) + x.xelem(i, k) * y.xelem(k, j);
           }
       }
   }
   retval(0) = z;
   return retval;
}


reply via email to

[Prev in Thread] Current Thread [Next in Thread]