Маскирование вложенного массива со значением по индексу со вторым массивом - PullRequest
2 голосов
/ 03 апреля 2019

У меня есть вложенный массив с некоторыми значениями.У меня есть другой массив, где длина обоих массивов равна.Я хотел бы получить вывод, где у меня есть вложенный массив 1 и 0, такой, что это 1, где значение во втором массиве было равно значению в этом вложенноммассив.

Я посмотрел на существующие вопросы о переполнении стека, но не смог построить ответ.

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);

По сути, это код, который у меня есть на данный момент, и он работает, ноЯ думаю, что это, вероятно, не самый эффективный способ сделать это.

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]]

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Еще одно хорошее решение с меньшей строкой кода.

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

После этого вы можете проверить производительность как в этом ответе следующим образом:

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

Обычно это означает, что если значение положительное, чем первое решение медленнее. Если у вас есть np.array вместо списка, вы можете попробовать сделать так, как описано в этом ответе :

type(y_pred)
>> numpy.ndarray
y_pred = y_pred.tolist()
type(y_pred)
>> list
0 голосов
/ 03 апреля 2019

Идея (наименьший цикл): сравнить массив и вложенный массив:

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

вы можете посмотреть это тоже:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...