[Numpy-discussion] zeros() default type in Numeric3

Robert Kern rkern at ucsd.edu
Mon Mar 28 23:37:16 EST 2005


Stephen Walton wrote:
> Robert Kern wrote:
> 
>>   Float.new(shape, value=None) # empty
>>   Float.new(shape, value=0)    # zeros
>>   Float.new(shape, value=1)    # ones
> 
> 
> Uhm, my first reaction to this kind of thing is "ugh," but maybe I'm 
> just not thinking in the correct OO mode.  Is this any better than 
> zeros() and ones()?  For that matter, is it any better than
> 
> x=zeros(shape)
> x=any_old_scalar

x[:] = any_old_scalar

you mean?

Perhaps not, *if* I need the default type, which I rarely do. And when I 
do need the default type, and I'm coding carefully, I will add the type 
anyways to be explicit.

I *do* think that

   x = CFloat.new(shape, 2j*pi)

is better than

   x = empty(shape, type=CFloat)
   x[:] = 2j*pi

I don't think there's much OO in it. The implementations won't change, 
really. It's more a matter of aesthetics of the API. I like it for much 
the same reasons that transpose(array) et al. were folded into methods 
of arrays.

Also, with Perry's and Francesc's suggestions, it collapses three very 
similar functions into one.

> Having said that, the main reason I use zeros() in MATLAB is to 
> preallocate space. 

I use it the same in Python. Sometimes, I'm going to be replacing all of 
the values (in which case I would use empty()), but often I only need to 
sparsely replace values. Usually, the "background" value ought to be 0, 
but occasionally, things get weirder.

But, this isn't a particularly important issue.

-- 
Robert Kern
rkern at ucsd.edu

"In the fields of hell where the grass grows high
  Are the graves of dreams allowed to die."
   -- Richard Harter




More information about the NumPy-Discussion mailing list