【问题标题】:Comparing few numpy arrays and getting the equal values比较几个numpy数组并获得相等的值
【发布时间】:2022-01-14 07:46:42
【问题描述】:

我正在研究泰坦尼克号数据集,在运行一些算法后,我有 y_predictions 的 numpy 数组。 我想比较它们并仅提取每个位置每个数组中相等的值。 例如:

index a b c d
0 1 1 1 1
1 1 0 1 1
2 0 0 1 0
3 0 1 0 1
4 0 0 0 0

a,b,c 和 d 是算法的 y_predictions。 输出应该是: [1, 0, 0, 0, 1] 因为在索引 0 和 4 处所有值都相等,所以我分配 1,否则分配 0。 基本上,我想做的是查看那些算法识别为“幸存”的索引(乘客),用 1 表示。

这是我的代码:

a= [1,1,0,0,0]
b= [1,0,0,1,0]
c= [1,1,1,0,0]
d= [1,1,0,1,0]
L= [a,b,c,d]
holder = L[0]
for i in range(len(L)):
   equality = np.where(holder == L[i+1], holder, 'None')
   holder = equ

但我得到了一些错误。 我将不胜感激任何建议

【问题讨论】:

  • 尝试将 range(len(L)) 更改为 range(len(L)-1) 并尝试运行您的代码。

标签: python arrays numpy compare


【解决方案1】:

您的 L 数组的形状错误,您应该对 L 进行转置以获得描述中的表格,我建议您将其转换为 numpy 数组:

result = []

a= [1,1,0,0,0]
b= [1,0,0,1,0]
c= [1,1,1,0,0]
d= [1,1,0,1,0]
L=np.array([a,b,c,d]).T
holder = L[0]
for i in range(len(L)):
    result.append(int(np.all(L[i,:] == L[i,0])))
print(result)

【讨论】:

    【解决方案2】:

    arr 上使用.all 方法检查是否存在所有值为1 的列,然后在(arr==0) 上再次使用.all 来检查是否存在所有值都为0 的列。这些的总和两个数组将是您想要的结果:

    arr = np.array([a,b,c,d])
    out = (arr.all(0) + (arr==0).all(0)).astype(int)
    

    输出:

    [1, 0, 0, 0, 1]
    

    【讨论】:

    • 您好,谢谢。我得到一个标量的结果,而不是向量。每个 y_pred 都是 int 64 (418,) 的数组
    • @paul 您必须在 all(0) 中包含 0 才能正确评估第一个轴。如果你不这样做,你会得到一个标量,因为默认选项对所有维度执行逻辑与,这不是你想要的。
    【解决方案3】:

    正如在另一个答案中指出的那样,您需要转置您的列表,并且最好将它们转换为一个 numpy 数组。

    你可以这样实现你想要的

    a= [1,1,0,0,0]
    b= [1,0,0,1,0]
    c= [1,1,1,0,0]
    d= [1,1,0,1,0]
    L= np.array([a,b,c,d]).T
    same_results = [len(set(col)) == 1 for col in L]
    
    print(same_results)
    # [True, False, False, False, True]
    

    【讨论】:

    • 它也可以,但结果是真或假。谢谢
    • @paul 布尔值和整数等价于 python 中的真值。如果您想要二进制整数,您可以简单地将map 转换为整数或执行[int(len(set(col)) == 1) for col in L]][1 if len(set(col)) == 1 else 0 for col in L]
    猜你喜欢
    • 2012-06-04
    • 2021-10-18
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多