[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;
}