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