[Top][All Lists]

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

Re: creating an matrix from C++ array

From: John Swensen
Subject: Re: creating an matrix from C++ array
Date: Sat, 4 Apr 2009 09:39:19 -0400

On Apr 4, 2009, at 3:23 AM, Jaroslav Hajek wrote:

On Sat, Apr 4, 2009 at 8:31 AM, Martijn <address@hidden> wrote:
I would like to create an octave matrix (of uint16) from an C++ array,
but there is apparently no constructor that accepts this:

       unsigned a[11];
       for(int i=0; i<11; i++)
       {       a[i]=i;
       uint16NDArray A(a,11);

Do I have to loop over all elements or is there a quicker way?
I want to used such construction to read a lot of uint16 data from a
file into an C++ array of unsigned shorts. Then I would like to create
an octave uint16NDArray from the array.

In short, no, there's no such constructor. If you want to avoid
copying the elements, use uint16NDArray to manage your data from the
very start.


RNDr. Jaroslav Hajek
computing expert & GNU Octave developer
Aeronautical Research and Test Institute (VZLU)
Prague, Czech Republic

I while ago, I wanted to do the same thing. I found something that might not be quite as clean, but was definitely as fast as one would expect.
Matrix m1(settings.width, settings.height);
uint8NDArray m = octave_value(m1).uint8_array_value();
octave_uint8* tmp = m.fortran_vec();
memcpy( tmp, capturebuffer, settings.height*settings.width );
return octave_value(m.transpose());
Note that my data was row major indexing and fotran_vec is column major indexing (I think). That is the reason I made my Matrix with the width and height swapped and then returned the transpose. I don't have the code I am talking about in front of me, just this snippet from an old email.

John Swensen

reply via email to

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