How to implement the mean function in NumPy without using the np.mean()?

Question:

I am learning how to code and wondered how to take the mean without using a builtin function (I know these are optimized and they should be used in real life, this is more of a thought experiment for myself).

For example, this works for vectors:

def take_mean(arr):
  sum = 0
  for i in arr:
    sum += i
  mean = sum/np.size(arr)
  
  return mean

But, of course, if I try to pass a matrix, it already fails. Clearly, I can change the code to work for matrices by doing:

def take_mean(arr):
  sum = 0
  for i in arr:
    for j in i:
      sum += i
  mean = sum/np.size(arr)
  
  return mean

And this fails for vectors and any >=3 dimensional arrays.

So I’m wondering how I can sum over a n-dimensional array without using any built-in functions. Any tips on how to achieve this?

Asked By: Victor Lacerda

||

Answers:

Unless you need to mean across a specific axis, the shape of the array does not matter to compute the mean. Making your first solution possible.

def take_mean(arr):
  sum = 0
  for i in arr.reshape(-1): # or arr.flatten()
    sum += i
    mean = sum/np.size(arr)
  
  return mean
Answered By: V. Guichard

You can use a combination of recursion and loop to achieve your objective without using any of numpy’s methods.

import numpy as np

def find_mean_of_arrays(array):
   sum = 0
   for element in array:
      if type(element) == type(np.array([1])):
         sum += find_mean_of_arrays(element)
      else:
         sum += element
   return sum/len(array)

Recursion is a powerful tool and it makes code more elegant and readable. This is yet another example

Answered By: sputnik
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.