On Dec 8, 2004, at 7:43 AM, Raymond Toy wrote:

>>>>>> "rif" == rif  <[EMAIL PROTECTED]> writes:
>
>     rif> Is there any way, in CMUCL, using some implementation-specific
>     rif> construct, to create an "aliased array"?  Suppose I create a
>     rif> double-float array of size 10:
>
>     rif> (make-array 10 :element-type 'double-float)
>
>     rif> I know I can take it's address, with #'system:vector-sap.
>
>     rif> What I want to do is manipulate that address and somehow 
> "invert"
>     rif> vector-sap to create a new double-float array whose first 
> element is
>     rif> (for example) the third element of the original array.
>
>     rif> I need this because I need to pass matlisp a subset of an 
> array.  More
>     rif> specifically, I want to allocate an n by n+1 array, so that I 
> can
>     rif> store half of each of two n by n symmetric arrays in n(n+1) 
> space
>     rif> rather than 2n^2 space.  This is a common technique for using
>     rif> BLAS/LAPACK, but to get at it, I need to be able to give a 
> Fortran
>     rif> matlisp routine a way to get at the square n by n matrix that 
> "starts
>     rif> with the second column" of the n by n+1 matrix, and the way 
> the
>     rif> interface is defined, it wants actual arrays, not pointers.  
> If I can
>     rif> somehow create the appropriate array, I don't have to go 
> mucking about
>     rif> in the internals of matlisp's def-fortran-routine and so 
> forth.
>
> Marc has already mentioned displaced arrays.  This should work, but
> depends on what you are really trying to do.

Not necessarily.  Displaced arrays are good for row-major slices.  So 
if the matrix where (N + 1 x N), then you could "displace away" the 
first row.  Unfortunately, FORTRAN is column-major.  The only way I see 
around this is to transpose the array first, and then displace.  
However, that may cause problems for the algorithm at hand.

Isn't this fun? :)

Cheers



--
Marco Antoniotti                                        
http://bioinformatics.nyu.edu
NYU Courant Bioinformatics Group                tel. +1 - 212 - 998 3488
715 Broadway 10th FL                            fax. +1 - 212 - 998 3484
New York, NY, 10003, U.S.A.


Reply via email to