[SOLVED] Replace rows in a numpy 2d array with rows from another 2d array

Issue

I have two 2d arrays, let’s call them img (m * n) and means (k * n), and a list, let’s call this clusters (m, ). I’d like to replace rows in the img array with rows from the means array where I select the row from the means array based on the value in the clusters list. For example:

Suppose, img

img = np.array([[0.40784314, 0.48627451, 0.52549022],
                [0.05490196, 0.1254902, 0.2]]) # This will be a (m * n) array

And, means

means = np.array([[0.80551694, 0.69010299, 0.17438512],
                 [0.33569541, 0.45309059, 0.52275014]]) # (k * n) array

And, clusters list

clusters = [1, 0] # list of length m

The Desired output is

[[0.33569541 0.45309059 0.52275014]
 [0.80551694 0.69010299 0.17438512]] # This should be a (m * n) array, same as img above

Notice that the first row has been replaced with the second row from the means array because cluster[0] == 1 and second row has been replaced with the first row from the means array because cluster[1] == 0 and so on so forth.

I am able to do this using the following line of code, but I was wondering if there is any faster way of doing this, if any.

np.array([means[i] for i in clusters])

Solution

What you’re looking for is called advanced indexing:

>>> means[clusters]
array([[0.33569541, 0.45309059, 0.52275014],
       [0.80551694, 0.69010299, 0.17438512]])

Answered By – ddejohn

Answer Checked By – Cary Denson (BugsFixing Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *