# [Numpy-discussion] np.zeros(2, 'S') returns empty strings.

Charles R Harris charlesr.harris at gmail.com
Sat Jan 14 23:01:09 EST 2012

```On Sat, Jan 14, 2012 at 5:21 PM, <josef.pktd at gmail.com> wrote:

> On Sat, Jan 14, 2012 at 5:25 PM, Benjamin Root <ben.root at ou.edu> wrote:
> > On Sat, Jan 14, 2012 at 4:16 PM, Benjamin Root <ben.root at ou.edu> wrote:
> >>
> >> On Sat, Jan 14, 2012 at 4:12 PM, Charles R Harris
> >> <charlesr.harris at gmail.com> wrote:
> >>>
> >>> This sort of makes sense, but is it the 'correct' behavior?
> >>>
> >>> In [20]: zeros(2, 'S')
> >>> Out[20]:
> >>> array(['', ''],
> >>>       dtype='|S1')
> >>>
> >>> It might be more consistent to return '0' instead, as in
> >>>
> >>> In [3]: zeros(2, int).astype('S')
> >>> Out[3]:
> >>> array(['0', '0'],
> >>>       dtype='|S24')
>
>
>
> I would be surprised if zeros is not an empty string, since an empty
> string is the "zero" for string addition.
> multiplication for strings doesn't exist, so ones can be anything even
> literally '1'
>
> >>> a = np.zeros(5,'S4')
> >>> a[:] = 'b'
> >>> reduce(lambda x,y: x+y, a)
> 'bbbbb'
>
>
> >>> a = np.zeros(1,'S100')
> >>> for i in range(5): a[:] = a.item() + 'a'
> ...
> >>> a
> array(['aaaaa'],
>      dtype='|S100')
>
>
> just as a logical argument, I have no idea what's practical since last
> time I tried to use numpy strings, I didn't find string addition and
> went back to double and triple list comprehension.
>
>
I don't think it was quite so cleverly reasoned out ;) The functions works
as expected for object arrays, but that is the only exception. For all
other types the allocated space is simply filled with zero bytes. Too bad
this isn't done in python like ones, it would be easier to fix.

<snip>

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20120114/b8784270/attachment.html>
```