[Numpy-discussion] Anyone have a well-tested SWIG-based C++ STL valarray <=> numpy.array typemap to share?
Mon Sep 17 00:04:22 CDT 2007
Christopher Barker wrote:
> Charles R Harris wrote:
>> On 9/10/07, *Christopher Barker* <Chris.Barker@noaa.gov
>> STL either, so I'm not sure there is any downside to valarray. It looks
>> like neither one [vector or valarray] supports any kind of "view" semantics, so for the
>> purposes of numpy array wrapping, they really aren't any different.
>> I think that the originator of valarray saying it was misguided might be
>> considered a downside.
> I had read that, though interestingly, I haven't seen any more recent
> commentary about the issues at all.
> In any case, it appears that what Budge is saying is that the original
> goal of valarray being well used for optimized numerical routines isn't
> going to happen (I don't think it has, though there is a PPC altivec
> version out there). However std::vector doesn't have any numerical
> optimizations either, so I don't see any reason to choose std::vector
> over std:valarray.
> My real question is what compiler and library writers are doing -- has
> anyone (OK, I guess MS and gcc are all I care about anyway) built
> anything optimized for them? Are they going to dump them? Who knows?
What do you mean by optimization ? I think this question is the key. I
remember having used blitz at some point, and I thought it was terrible.
It is really complicated, and to get good performances was really
difficult. Maybe I used it wrongly, I don't know (this was a few years
ago). But at some point, I decided to just use plain C arrays instead:
the code was much faster, and actually much easier (I really hate
I personnally don't think all the template things worth it for
optimizing temporaries (which was the goal of blitz): the complexity
cost is enormous, for not much benefit. I think C++ is much more useful
for the automatic memory management through RAII, which is what
std::vector gives you. As long as you think about setting the right size
to avoid resizes, all other considerations are not worthwhile IMHO. C
speed is already quite good on modern CPU, and std::vector gives you
that. If your compiler supports restrict, use it
this will give you "Fortran speed".
The fact that, while C++ being a popular language, a standard class for
matrix algebra does not exist yet shows me that this is not that useful,
or too complicate to develop.
More information about the Numpy-discussion