Search code examples
python-3.xcluster-computingminimum

Finding the minimum value in a cluster of array using python


I need some help regarding the coding using python.

Here is the problem.

Let say I have an array (size = (50,50)) containing float numbers. I would like to find the minimum value for every cluster of cells (size = (10,10)). So in total, I will have 25 values. This is what I did so far, maybe there is another way to do it so that the program could run faster since I need it to handle a quite big array (let say 1 mil x 1 mill of cells).

import numpy as np
import random
def mini_cluster(z,y,x):
    a = []
    for i in range(y,y+10):
        for j in range(x,x+10):
            a.append(z[i,j])
    return min(a) 

z = np.zeros(shape=(50,50))

for i in range (len(z)):
    for j in range(len(z)):
        z[i,j] = random.uniform(10,12.5)

mini = []
for i in range(0,len(z),10):
    for j in range(0,len(z),10):
        mini.append(mini_cluster(z,i,j)) 

Solution

  • I am not sure of its speed but using numpy slicing should simplify your work. you can avoid all those for loops. here is some sample code

    import numpy as np
    arr=[[1,2,3,8],[4,5,6,7],[8,9,10,11],[0,3,5,9]]
    arr_np = np.array(arr)
    print(arr_np)
    cluster= arr_np[:3,:3]
    print('\n')
    print(cluster)
    print('\n')
    print(np.amin(cluster))
    
    [[ 1  2  3  8]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [ 0  3  5  9]]
    
    [[ 1  2  3]
     [ 4  5  6]
     [ 8  9 10]]
    
    1
    

    you can also check this tutorial