【问题标题】:Get the elements from an array -list under certain condition在特定条件下从数组列表中获取元素
【发布时间】:2020-11-07 00:11:33
【问题描述】:

我试图只打印列 (j) 和列 (j+1) 之间的差异等于 [0,1] 的元素的行。这意味着,在给定的示例中,我将只保留第一列(此数据集只是较大数据集的一个小样本):

e= [([0, 0], [0, 1], [0, 2]),
 ([0, 0], [0, 1], [0, 3]),
 ([0, 0], [0, 2], [1, 0]),
 ([0, 0], [0, 2], [1, 1]),
 ([0, 0], [0, 2], [1, 1]),
 ([0, 0], [0, 2], [1, 1]),
 ([0, 0], [0, 2], [1, 2]),
 ([0, 0], [0, 2], [1, 2]),
 ([0, 0], [0, 2], [2, 0]),
 ([0, 0], [1, 0], [1, 1]),
 ([0, 0], [1, 0], [1, 1]),
 ([0, 0], [1, 0], [1, 1]),
 ([0, 0], [1, 2], [2, 0])]


for i in range(0,12):
    for j in range(0,2):
        if ((np.array(e[i][j+1]) - np.array(e[i][j])) == [0,1]):
            print (e[i])

提前致谢!

【问题讨论】:

  • 你会从什么中减去 [0,2](e[0][2],因为 e[0][3] 不存在)?你想打印那个吗?另外我认为你在创建 numpy 数组的方式上犯了一个小错误
  • "我试图只打印列 (j) 和列 (j+1) 之间的差异等于 [0,1] 的元素的行。"那么,在减法的结果中,所有的值都需要与参考值匹配吗?并且错误消息表明您应该在比较结果上使用.any.all - 我想知道哪个是合适的,因为您希望 所有 值都匹配?跨度>

标签: python sorting arraylist


【解决方案1】:

您会得到一个ValueError,因为这里使用== 返回一个bools 数组,表示每个元素的相等性,而不是bool 本身。例如:

np.array([1, 2]) == [1, 2]

返回np.array([True, True])不是True。要获得单个布尔值的结果,请使用all(),如果调用它的bool 数组中的所有元素都是True,它将返回True。固定的if 条件变为:

((np.array(e[i][j+1]) - np.array(e[i][j])) == [0,1]).all()

在固定条件下,代码最终输出:

([0, 0], [0, 1], [0, 2])
([0, 0], [0, 1], [0, 2])
([0, 0], [0, 1], [0, 3])
([0, 0], [1, 0], [1, 1])
([0, 0], [1, 0], [1, 1])
([0, 0], [1, 0], [1, 1])

这似乎是正确的。

【讨论】:

    【解决方案2】:

    让我从这个问题开始。

    当您将numpy.array 与多个元素进行比较时,您可能会得到以下结果:[True, False]

    if-statement 不知道如何理解这一点,因此您需要完全按照异常告诉您的操作,您需要在条件末尾添加.all(),如下所示:@ 987654326@.

    在下面我假设,根据您的代码,您正在寻找仅包含列之间存在差异[0,1] 的行,而不是列。 (如果我弄错了,对不起。我刚醒来。)

    让我们继续。

    还有一个问题。使用您的解决方案,您将得到以下结果:

    ([0, 0], [0, 1], [0, 2])

    ([0, 0], [0, 1], [0, 2])

    ([0, 0], [0, 1], [0, 3])

    ([0, 0], [1, 0], [1, 1])

    ([0, 0], [1, 0], [1, 1])

    ([0, 0], [1, 0], [1, 1])

    但是你想要的结果是这样的:

    ([0, 0], [0, 1], [0, 2])

    因此,这是我基于 post 的解决方案。

    import numpy as np
    
    class ContinueEx(Exception):
        pass
    
    continue_ex = ContinueEx()
    
    _list = e= [([0, 0], [0, 1], [0, 2]),
     ([0, 0], [0, 1], [0, 3]),
     ([0, 0], [0, 2], [1, 0]),
     ([0, 0], [0, 2], [1, 1]),
     ([0, 0], [0, 2], [1, 1]),
     ([0, 0], [0, 2], [1, 1]),
     ([0, 0], [0, 2], [1, 2]),
     ([0, 0], [0, 2], [1, 2]),
     ([0, 0], [0, 2], [2, 0]),
     ([0, 0], [1, 0], [1, 1]),
     ([0, 0], [1, 0], [1, 1]),
     ([0, 0], [1, 0], [1, 1]),
     ([0, 0], [1, 2], [2, 0])]
    
    for _inner_list in range(0,len(_list)):
        try:
            for _list_element in range(1, len(_list[_inner_list])):
                if not ((np.array(_list[_inner_list][_list_element]) - np.array(_list[_inner_list][_list_element-1])  == np.array([0,1]))).all():
                    raise continue_ex
            print(_list[_inner_list])
        except ContinueEx:
            continue
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 2022-12-07
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 2016-04-03
      相关资源
      最近更新 更多