【问题标题】:Ensure that an array has all values encoded as 1 and -1, not 1 and 0确保数组的所有值都编码为 1 和 -1,而不是 1 和 0
【发布时间】:2021-04-15 06:26:34
【问题描述】:

有一个名为"target_y" 的一维numpy 数组。我的任务是在执行逻辑回归之前确保"target_y" 的所有值都编码为1-1,而不是10。完成后,我需要将其分配给"prepared_y" 并返回。我可以写类似的东西吗:

if target_y in 1,-1:
    prepared_y = target_y 

【问题讨论】:

  • 为什么不将0 值替换为-1?快速搜索替换 numpy 数组中的值将显示如何做到这一点。
  • 您在搜索all()吗? 1-1 都将被解释为 True,因此如果没有 0 项,all(target_y) 将返回 True
  • 目标是将所有 0 转换为 -1,还是返回一个说明数组是否有效的布尔值?
  • 另外,是List 还是numpy array
  • 是的,目标是检查是否有任何 0 并将它们转换为 -1。

标签: python arrays pandas list numpy


【解决方案1】:

if语句可以检查一个值,如:

if 0 in test_list:
    return test_list

为了准确回答您的问题,您需要一个循环来检查每个值:

def list_checker(test_list):
    for i, num in enumerate(test_list):
        if num == 0:
            test_list[i] = -1
    return test_list

【讨论】:

    【解决方案2】:

    对于列表,您可以这样做:

    def convert( l ):
      return [ -1 if e == 0 else e for e in l ]
    

    对于numpy array

    def convert( l ):
      return l[ l == 0 ] = -1
    

    【讨论】:

    • [e or -1 for e in l]
    • 我这样做的原因是,以防除了10 之外还有其他值,但实际上,如果你能确保这是仅有的两个值,@OlvinR​​oght 的建议将工作,如果 e 评估为 False,则默认为 -1。
    【解决方案3】:

    要将numpy.array 中的所有0 值替换为-1,如下所示:

    a[a == 0] = -1
    

    ...其中a 是一维数组。

    【讨论】:

    • 谢谢!这是我的问题最简单的解决方案。
    • 我的荣幸。很高兴它有帮助。
    【解决方案4】:

    结帐np.all:

    我们可以做一些快速的布尔运算来检查所有的值是1还是-1

    if np.all((target_y == 1) + (target_y == -1)): # checks if the array has all 1s and -1s
        prepared_y = target_y
    

    如果要将所有0s 更改为-1s,请对所有0s 进行切片:

    target_y[np.argwhere(target_y == 0)] = -1
    

    【讨论】:

    • 您也可以使用np.all(target_y)
    • @OlvinR​​oght 不相当,但接近。 np.all(arr) 将适用于所有非零数组。它不检查是否都是 -1 和 1
    • 是的,我知道,但它适合作为这个特定问题的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 2012-03-28
    相关资源
    最近更新 更多