RevGen
RevGen

Reputation: 31

Compute a mean of an array group by unique values in python

If I have an array

[0,0,0,0,0,0,1,1,2,2,2,2]

How can I compute the mean by each unique value in the array using numpy.mean().

I'd like to have [6/12, 2/12,4/12] not using count or len but only np.mean

I am just starting with Python.

Upvotes: 2

Views: 446

Answers (4)

Ehsan
Ehsan

Reputation: 12407

Since you want the mean of counts (and not the values themselves), you can use np.unique to get the counts. a is your array:

np.unique(a,return_counts=True)[1]/a.size

output:

[0.5        0.16666667 0.33333333]

Upvotes: 0

user192361237
user192361237

Reputation: 538

You make no sense when you say you can only use the np.mean function. You need something else, unless you want to implement these functions yourself, which makes no sense.

In fact, you don’t even really need np.mean at all, but instead, np.unique:

import numpy as np
a = np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2])
unique, counts = np.unique(a, return_counts = True)
s = sum(counts)
means = [count / s for count, value in zip(counts, unique)]

EDIT:

Of course, you could just simplify this to:

np.unique(a, return_counts = True)[1]  / a.size

which was pointed out by another answerer.

Upvotes: 1

tRex002
tRex002

Reputation: 41

Use Counter for counting unique values count as follows:

import numpy as np
from collections import Counter

a = np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2])
output = np.array(list(Counter(a).values()))/a.size

output will be:

output : [0.5        0.33333333 0.16666667]

Upvotes: 1

Dishin H Goyani
Dishin H Goyani

Reputation: 7693

How can I compute the mean by each unique value in the array using numpy.mean().

Using numpy.mean might not possible.

But to achieve that you can use numpy.bincount and len

import numpy as np

np.bincount(a)/len(a)
array([0.5       , 0.16666667, 0.33333333])

Upvotes: 2

Related Questions