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

S

Satoru Logic

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.
 
T

Terry Reedy

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.
 
A

alex23

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>
 
S

Steven D'Aprano

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.
 
S

suzaku

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".
 
S

Steven D'Aprano

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.

:)
 
S

suzaku

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top