[Numpy-discussion] Re: [SciPy-user] Current thoughts on future directions
Pearu Peterson
pearu at scipy.org
Sun Mar 13 11:34:33 EST 2005
On Sun, 13 Mar 2005, Michiel Jan Laurens de Hoon wrote:
> Pearu Peterson wrote:
>>> Travis Oliphant wrote:
>>>
>>>> 1) There will be a scipy_core package which will be essentially what
>>>> Numeric has always been (plus a few easy to install extras already in
>>>> current scipy_core).
> ...
>>>> linalg (a lite version -- no fortran or ATLAS dependency)
>>
>> Again, what would be the underlying linear algebra library here?
>> Numeric uses f2c version of lite lapack library. Shall we do the same but
>> wrapping the c codes with f2py rather than by hand? f2c might be useful
>> also in other cases to reduce fortran dependency, but only when it is
>> critical to ease the scipy_core installation.
>>
> If I understand Travis correctly, the idea is to use Numeric as the basis for
> scipy_core, allowing current Numerical Python users to switch to scipy_core
> with a minimum of trouble. So why not use Numeric's lite lapack library
> directly? What is the advantage of repeating the c code wrapping (by f2py or
> by hand)?
First, I wouldn't repeat wrapping c codes by hand.
But using f2py wrappers has the following advantages:
(i) maintaining the wrappers is easier (as the wrappers are generated)
(ii) one can easily link linalg_lite against optimized lapack. This is
certainly possible with current Numeric but for a smaller set of Fortran
compilers than when using f2py generated wrappers (for example, if a
compiler produces uppercased symbol names then Numeric wrappers won't
work)
(iii) scipy provides wrappers to a larger set of lapack subroutines than
Numeric, and with f2py it is easier and less errorprone to add new
wrappers to lapack functions than wrapping them by hand, i.e. extending
f2py generated linalg_lite is much easier than extending the current
Numeric lapack_lite.
(iv) and finally, f2py generated wrappers tend to be more efficient than
Numeric hand coded wrappers. Here are some benchmark results comparing
scipy and Numeric linalg functions:
Finding matrix determinant
==================================
| contiguous | non-contiguous
----------------------------------------------
size | scipy | Numeric | scipy | Numeric
20 | 0.16 | 0.22 | 0.17 | 0.26 (secs for 2000 calls)
100 | 0.29 | 0.41 | 0.28 | 0.56 (secs for 300 calls)
500 | 0.31 | 0.36 | 0.33 | 0.45 (secs for 4 calls)
Finding matrix inverse
==================================
| contiguous | non-contiguous
----------------------------------------------
size | scipy | Numeric | scipy | Numeric
20 | 0.28 | 0.33 | 0.27 | 0.37 (secs for 2000 calls)
100 | 0.64 | 1.06 | 0.64 | 1.24 (secs for 300 calls)
500 | 0.83 | 1.10 | 0.84 | 1.18 (secs for 4 calls)
Solving system of linear equations
==================================
| contiguous | non-contiguous
----------------------------------------------
size | scipy | Numeric | scipy | Numeric
20 | 0.26 | 0.18 | 0.26 | 0.21 (secs for 2000 calls)
100 | 0.31 | 0.35 | 0.31 | 0.52 (secs for 300 calls)
500 | 0.33 | 0.34 | 0.35 | 0.41 (secs for 4 calls)
Remark: both scipy and Numeric are linked agaist the same ATLAS/Lapack
library.
Pearu
More information about the NumPy-Discussion
mailing list