help-octave
[Top][All Lists]

Re: Cast Matrix to C++ array

 From: Andy Buckle Subject: Re: Cast Matrix to C++ array Date: Wed, 5 Jan 2011 09:37:21 +0000

```On Wed, Jan 5, 2011 at 9:07 AM, Surfing <address@hidden> wrote:
> Thanks....btw that method returns a mono-dimensional array. Isn't there a
> way to access it as a matrix? (so with mat[row][column])
>
> Thanks
>
> Il 05/01/2011 09:19, Andy Buckle ha scritto:
>>
>> On Wed, Jan 5, 2011 at 7:26 AM, Surfing<address@hidden>  wrote:
>>>
>>> Hi all,
>>> is there a way to do a "fast" cast from a Matrix octave type to an C++
>>> bi-dimensional double array?
>>> Or the only way is doing it element by element?
>>
>> "
>> — Method: T* fortran_vec (void)
>>
>>     This method returns a pointer to the underlying data of the matrix
>> or a array so that it can be manipulated directly, either within
>> Octave or by an external library.
>> "
>>
>>
>> http://www.gnu.org/software/octave/doc/interpreter/Matrices-and-Arrays-in-Oct_002dFiles.html#Matrices-and-Arrays-in-Oct_002dFiles
>>

(Please reply-to-all, and post new stuff after the copy of the previous email)

I think Octave stores stuff internally as 1D. I think this sort of

#include "octave/oct.h"

DEFUN_DLD (array_dim, args, nargout,"") {
octave_value_list retval;

const int rows=3, cols=4;

dim_vector dv(rows,cols);
uint32NDArray arr(dv);
uint32_t * pix_p=(uint32_t *)arr.fortran_vec();

for (uint32_t i=0; i<rows*cols ;i++) {
pix_p[i] = i;
}

printf("%i\n",pix_p[1+rows*2]); // (2,3)

return octave_value(arr);
}

--
/* andy buckle */

```