【问题标题】:Indexing a Boolean Array with another Boolean Array in Python在 Python 中用另一个布尔数组索引一个布尔数组
【发布时间】:2016-07-20 11:22:13
【问题描述】:

我有一个包含两个布尔数组的数据集。

第一个布尔数组指示哪些数据点附加了错误,并用于指定是否在 MCMC 例程中打开错误。第二个数组指示每个数据点是否具有测量长度。

如何通过Has_length 数组索引Boolean_error 数组,以便我将拥有一个由Has_length == TrueBoolean_error == TrueBoolean_error == False 的对象组成的列表?

这是我正在尝试做的一个示例:

Boolean_error = [False True False True True False True False False False False False]
Has_length = [True True True True False True True True True True True False]

print Boolean_error[Has_length]

>>> [False True False True False True False False False False]

【问题讨论】:

  • 您到底需要什么?我不明白
  • 你错过了逗号吗?
  • 请注意,python 有 lists 而不是 arrays(好吧,它确实有数组,但它们并不常见)。此外,这不是有效的 Python
  • 你会想要使用 numpy 数组;他们有这种行为。
  • 感谢您的编辑,Bharel!我是一名 Python 学生,所以我仍在学习如何正确表达事物。

标签: python arrays indexing boolean


【解决方案1】:

你可以写一个函数来做到这一点。

def return_list_with_only_known_length(error, length):
    output = []
    for i, b in enumerate(length):
        if b:
            output.append(error[i])
    return output

【讨论】:

  • 长而复杂的伴侣。编辑了你的答案,这样它会更整洁一些,但仍然有一个更简单的答案。
【解决方案2】:

给你。这正是您所需要的。

errors_with_length = [b for b, l in zip(Boolean_error, Has_length) if l]

zip() 函数每次从每个可迭代对象中获取 1 个值,列表推导过滤掉错误的 Has_length,并为 True 获取 Boolean_error


另一种更有效的方法是像这样使用itertools.compress()

>>> list(itertools.compress(Boolean_error, Has_length))
[False, True, False, True, False, True, False, False, False, False]

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    相关资源
    最近更新 更多