winnie
winnie

Reputation: 109

Masking nested array with value at index with a second array

I have a nested array with some values. I have another array, where the length of both arrays are equal. I'd like to get an output, where I have a nested array of 1's and 0's, such that it is 1 where the value in the second array was equal to the value in that nested array.

I've taken a look on existing stack overflow questions but have been unable to construct an answer.

masks_list = []
for i in range(len(y_pred)):
    mask = (y_pred[i] == y_test.values[i]) * 1
    masks_list.append(mask)
masks = np.array(masks_list);

Essentially, that's the code I currently have and it works, but I think that it's probably not the most effecient way of doing it.

YPRED:
[[4 0 1 2 3 5 6]
 [0 1 2 3 5 6 4]]

YTEST:
8    1
5    4

Masks:
[[0 0 1 0 0 0 0]
 [0 0 0 0 0 0 1]]

Upvotes: 2

Views: 463

Answers (2)

ElConrado
ElConrado

Reputation: 1638

Another good solution with less line of code.

a = set(y_pred).intersection(y_test)
f = [1 if i in a else 0 for i, j in enumerate(y_pred)]

After that you can check performance like in this answer as follow:

import time
from time import perf_counter as pc

t0=pc()    
a = set(y_pred).intersection(y_test)
f = [1 if i in a else 0 for i, j in enumerate(y_pred)]
t1 = pc() - t0

t0=pc()
for i in range(len(y_pred)):
    mask = (y_pred[i] == y_test[i]) * 1
    masks_list.append(mask)
t2 = pc() - t0

val = t1 - t2

Generally it means if value is positive than the first solution are slower. If you have np.array instead of list you can try do as described in this answer:

type(y_pred)
>> numpy.ndarray
y_pred = y_pred.tolist()
type(y_pred)
>> list

Upvotes: 1

Jaja
Jaja

Reputation: 788

Idea(least loop): compare array and nested array:

masks = np.equal(y_pred, y_test.values)

you can look at this too:

np.array_equal(A,B)  # test if same shape, same elements values
np.array_equiv(A,B)  # test if broadcastable shape, same elements values
np.allclose(A,B,...) # test if same shape, elements have close enough values

Upvotes: 0

Related Questions