|
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:Hi,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 afile into an C++ array of unsigned shorts. Then I would like to createan 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. regards -- RNDr. Jaroslav Hajek computing expert & GNU Octave developer Aeronautical Research and Test Institute (VZLU) Prague, Czech Republic url: www.highegg.matfyz.cz
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
[Prev in Thread] | Current Thread | [Next in Thread] |