Select floats in different multidimentional arrays using python

Welcome to Programming Tutorial official website. Today - we are going to cover how to solve / find the solution of this error Select floats in different multidimentional arrays using python on this date .

I have different multidimensional arrays, for example:

[[0, 3, 7, 2], [7, -1.3, 4, 0.2], [3.1, 3, -1, -1]]

[[[0, 1], [3, 4]], [[7, 3.142], [-2.71, 1.8]]]

And I would like to randomize a certain amount of the floats contained in the different arrays.

eg:
randomize([0.0, 1.1, 2.2, 3.3, 4.4, 5.5], percentage=50)
-> [0.0, -2.24, 4.31, 3.3, 4.4, 6.3]      

The problem is that I would like to do it with arrays of different dimensions using the same function. I have a clear idea for the random part but I can’t manage to select all the floats because of the different dimensions of my arrays.

I would really love a basic python or numpy solution, thanks!

Answer

You can remember the shape first, flatten array and then reshape it to the original shape.

import numpy as np

def randomize(ar, perc=50):
    
    # remember original shape
    sh = ar.shape
    
    # generate required number of random values
    rand_count = int(ar.size*perc/100)
    random_vals = np.random.rand(rand_count)
    
    # get random indices (without repetitions) to replace
    rand_ind = np.random.default_rng().choice(ar.size, size=rand_count, replace=False)

    # flatten the arary first
    flat_ar = ar.flatten()
    
    # replace required number of values by random values
    flat_ar[rand_ind] = random_vals
    
    # return in original shape
    return flat_ar.reshape(sh)