[Numpy-discussion] fortran array storage question

David Cournapeau david@ar.media.kyoto-u.ac...
Fri Oct 26 07:25:44 CDT 2007


Georg Holzmann wrote:
> Hallo!
>
> I found now a way to get the data:
>
>   
>> Therefore I do the following (2D example):
>>
>>    obj = PyArray_FromDimsAndData(2, dim0, PyArray_DOUBLE, (char*)data);
>>    PyArrayObject *tmp = (PyArrayObject*)obj;
>>    tmp->flags = NPY_FARRAY;
>>     
>
> if in that example I also change the strides:
>
>    int s = tmp->strides[1];
>    tmp->strides[0] = s;
>    tmp->strides[1] = s * dim0[0];
>
> Then I get in python the fortran-style array in right order.
>
> However, I don't know if this is the usual way or if it has a 
> performance overhead ...
>
>   
This depends on what you are trying to do, but generally, I find that if 
you can afford it memory-wise, it is much faster to just get a C 
contiguous array if you treat your C array element per element. If you 
don't access element per element, then it can become much more 
difficult, of course (specially if you have to use several times the 
same parts of the memory).

cheers,

David


More information about the Numpy-discussion mailing list