Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Is `wsample` a proper name for a function like this?

Reply
Thread Tools

Is `wsample` a proper name for a function like this?

 
 
Satoru Logic
Guest
Posts: n/a
 
      10-11-2012
I came across a function named `wsample` in a `utils` package of my workplace recently.

The "w" in `wsample` stands for `weighted`, and it randomly selects an element from a container according to relative weights of all the elements.

In most articles and codes I saw online, a function like this is often named `weighted_random_choice`, which sounds *correct* to me.
So when I saw this `wsample` function, I considered it a improper name.
Because `wsample`makes me think of `random.sample`, which returns a list of randomly generated elements, not a element.
 
Reply With Quote
 
 
 
 
Terry Reedy
Guest
Posts: n/a
 
      10-11-2012
On 10/10/2012 11:33 PM, Satoru Logic wrote:
> I came across a function named `wsample` in a `utils` package of my
> workplace recently.
>
> The "w" in `wsample` stands for `weighted`, and it randomly selects
> an element from a container according to relative weights of all the
> elements.


I agree that wt_select for weighted select might be better for a sample
size of 1 .

> In most articles and codes I saw online, a function like this is
> often named `weighted_random_choice`, which sounds *correct* to me.


Easier to understand, at least the first time, harder to write. Be glad
the author did not use 'ws' as would have once been common.

> So when I saw this `wsample` function, I considered it a improper
> name. Because `wsample`makes me think of `random.sample`, which
> returns a list of randomly generated elements, not a element.


--
Terry Jan Reedy

 
Reply With Quote
 
 
 
 
alex23
Guest
Posts: n/a
 
      10-11-2012
On Oct 11, 1:33*pm, Satoru Logic <(E-Mail Removed)> wrote:
> I came across a function named `wsample` in a `utils` package
> of my workplace recently.
>
> The "w" in `wsample` stands for `weighted`, and it randomly
> selects an element from a container according to relative
> weights of all the elements.
>
> So when I saw this `wsample` function, I considered it a improper name.


I tend to agree. I like descriptive names for functions that don't
assume familiarity. If you're unhappy with a function's name and
you're unable to modify the module it belongs to, you can always
rebind it yourself:

from utils import wsample as weighted_random_choice

If I'm then going to use that function heavily elsewhere, I _might_
rebind it, but always within the scope that is going to use the
abbreviated binding:

wrc = weighted_random_choice
<lots of lines of code using wrc>
 
Reply With Quote
 
Steven D'Aprano
Guest
Posts: n/a
 
      10-11-2012
On Wed, 10 Oct 2012 20:33:16 -0700, Satoru Logic wrote:

> I came across a function named `wsample` in a `utils` package of my
> workplace recently.
>
> The "w" in `wsample` stands for `weighted`, and it randomly selects an
> element from a container according to relative weights of all the
> elements.
>
> In most articles and codes I saw online, a function like this is often
> named `weighted_random_choice`, which sounds *correct* to me. So when I
> saw this `wsample` function, I considered it a improper name. Because
> `wsample`makes me think of `random.sample`, which returns a list of
> randomly generated elements, not a element.


You can have a sample size of one.

wsample sounds fine to me. weighted_random_choice is okay too. It depends
whether you value brevity over explicitness. Explicit is good, but some
names are just too long.

If this were my code base, I would probably go for weighted_sample
without mentioning "random" in the name, the reasoning being that samples
are almost always random so explicitly saying so doesn't help much.


--
Steven
 
Reply With Quote
 
suzaku
Guest
Posts: n/a
 
      10-11-2012
On Thursday, October 11, 2012 2:29:37 PM UTC+8, Steven D'Aprano wrote:
> On Wed, 10 Oct 2012 20:33:16 -0700, Satoru Logic wrote:
>
>
>
> > I came across a function named `wsample` in a `utils` package of my

>
> > workplace recently.

>
> >

>
> > The "w" in `wsample` stands for `weighted`, and it randomly selects an

>
> > element from a container according to relative weights of all the

>
> > elements.

>
> >

>
> > In most articles and codes I saw online, a function like this is often

>
> > named `weighted_random_choice`, which sounds *correct* to me. So when I

>
> > saw this `wsample` function, I considered it a improper name. Because

>
> > `wsample`makes me think of `random.sample`, which returns a list of

>
> > randomly generated elements, not a element.

>
>
>
> You can have a sample size of one.
>
>
>
> wsample sounds fine to me. weighted_random_choice is okay too. It depends
>
> whether you value brevity over explicitness. Explicit is good, but some
>
> names are just too long.
>
>
>
> If this were my code base, I would probably go for weighted_sample
>
> without mentioning "random" in the name, the reasoning being that samples
>
> are almost always random so explicitly saying so doesn't help much.


I think if a programmer has used the built-in `random` module before, he would expect a function with "sample" in its name to return a population sequence.

If a function is to return scalar value instead of sequence, I would expect it to be named "choice".

>
>
>
>
>
> --
>
> Steven


 
Reply With Quote
 
Steven D'Aprano
Guest
Posts: n/a
 
      10-12-2012
On Wed, 10 Oct 2012 23:44:42 -0700, suzaku wrote:

> I think if a programmer has used the built-in `random` module before, he
> would expect a function with "sample" in its name to return a population
> sequence.


I have used the random module for about fifteen years, and I still write
random.sample when I need to use random.choice.

In statistics, probability, and plain English, a sample can be a single
item: that's why we can say "a sample" or "two samples".


> If a function is to return scalar value instead of sequence, I would
> expect it to be named "choice".


And I wouldn't. But what do I care? I'm never going to use the code
you're talking about, so call it "sasquatch" if you like, it's no skin
off my nose.




--
Steven
 
Reply With Quote
 
suzaku
Guest
Posts: n/a
 
      10-12-2012
On Friday, October 12, 2012 10:22:16 AM UTC+8, Steven D'Aprano wrote:
> On Wed, 10 Oct 2012 23:44:42 -0700, suzaku wrote:
>
>
>
> > I think if a programmer has used the built-in `random` module before, he

>
> > would expect a function with "sample" in its name to return a population

>
> > sequence.

>
>
>
> I have used the random module for about fifteen years, and I still write
>
> random.sample when I need to use random.choice.
>
>
>
> In statistics, probability, and plain English, a sample can be a single
>
> item: that's why we can say "a sample" or "two samples".


Thanks for sharing your experience.

As I'm not a native speaker of English,
when I learned that `random.choice` return single item,
and `random.sample` return a sequence of items,
I thought that the behaviour is determined by their definitions.

>
>
>
>
>
> > If a function is to return scalar value instead of sequence, I would

>
> > expect it to be named "choice".

>
>
>
> And I wouldn't. But what do I care? I'm never going to use the code
>
> you're talking about, so call it "sasquatch" if you like, it's no skin
>
> off my nose.
>
>
>
>
>
>
>
>
>
> --
>
> Steven


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Proper way to use LIKE operator with SqlDataSource and control parameters in declarative markup? ASP .Net 2 08-18-2007 02:07 AM
Getting MSVC to compile proper unix stuff, like hash_map, fts.h, dirent.h collection60@hotmail.com C++ 9 05-10-2006 06:59 PM
object-like macro used like function-like macro Patrick Kowalzick C++ 5 03-14-2006 03:30 PM
Create a Desktop Icon with proper icon name, not URL name Bodi Javascript 1 11-18-2003 02:40 AM
Can cout do like printf("Name: %s, Age: %d\n",name,age)? cylin C++ 6 08-19-2003 09:03 PM



Advertisments