使用第二个数组掩盖嵌套数组的索引值

时间:2019-04-03 06:06:49

标签: python numpy

我有一个带有一些值的嵌套数组。我有另一个数组,两个数组的长度相等。我想得到一个输出,其中有一个10的嵌套数组,因此第二个数组中的值等于的是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 个答案:

答案 0 :(得分:1)

另一种不错的解决方案,只需更少的代码行。

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

之后,您可以按照以下方式检查性能,例如in this answer

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而不是列表,则可以按照in this answer所述进行操作:

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

答案 1 :(得分:0)

想法(最少循环):比较数组和嵌套数组:

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

您也可以查看this

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