Reputation: 13145
How can I average, in a generic sense, the values in a tuple of tuples such that:
(1,2,3),(3,4,5)
becomes:
(2,3,4)
Upvotes: 4
Views: 23404
Reputation: 1
private Tuple<int, double> CalcuteAverageTulpeList(List<Tuple<int, double>> tupleParameters)
{
int totalLtGain = 0;
double totalMeasured = 0;
foreach (var tupleParameter in tupleParameters)
{
totalLtGain = totalLtGain + tupleParameter.Item1;
totalMeasured = totalMeasured + tupleParameter.Item2;
}
int averageLtGain = totalLtGain / tupleParameters.Count();
double averageMeasured = totalMeasured / tupleParameters.Count();
return new Tuple<int, double>(averageLtGain, averageMeasured);
}
Upvotes: -2
Reputation: 52778
You can use zip
like so:
In [1]: x = ((1, 2, 3), (4, 5, 6))
In [2]: [sum(y) / len(y) for y in zip(*x)]
Out[3]: [2, 3, 4]
Another method using lambda
with more then 2 tuples in the tuple and resulting in float's instead of int's:
>>> x = ((10, 10, 10), (40, 55, 66), (71, 82, 39), (1, 2, 3))
>>> print tuple(map(lambda y: sum(y) / float(len(y)), zip(*x)))
(30.5, 37.25, 29.5)
Upvotes: 19
Reputation: 78620
x = ((1,2,3),(3,4,5))
from numpy import mean # or write your own mean function
tuple(map(mean, zip(*x)))
# (2.0, 3.0, 4.0)
or:
from numpy import mean
tuple(mean(x, axis=0))
Upvotes: 12