【问题标题】:Selecting rows in 2-D numpy array based on subset of column values根据列值的子集选择二维 numpy 数组中的行
【发布时间】:2022-11-26 22:07:43
【问题描述】:

假设我有以下 numpy 数组:

a = np.array([[1, 1, 0, 0, 1],
       [1, 1, 0, 0, 0],
       [1, 0, 0, 1, 1],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 0],
       [0, 0, 0, 1, 0],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 0],
       [1, 1, 1, 0, 1],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 1],
       [1, 1, 0, 0, 0],
       [1, 0, 0, 1, 0],
       [1, 0, 1, 1, 0]])

我只想选择行,其中索引为 1 的列的值为 1,索引为 2 的列的值为 0。

我尝试了以下内容:

evidence = {1:1,2:0}
mask = a[:,list(evidence.keys())] == list(evidence.values())

但在那之后我被困住了。 我怎样才能在 numpy 二维数组中做到这一点?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    尝试:

    out = a[(a[:, 1] == 1) & (a[:, 2] == 0)]
    

    给定一个包含列、值对的字典,您可以使用:

    evidence = {1:1,2:0}
    out = a[ np.logical_and.reduce([a[:, c] == v for c, v in evidence.items()]) ]
    

    将上述解决方案概括为 & 序列。

    【讨论】:

    • 谢谢您的回答!这可行,一般如何完成(对于 n 列)?例如,如果我有一个包含 n 个键值对的字典?
    • 查看编辑后的解决方案。 evidence 作为字典对我来说感觉有点尴尬。如果那是你可以改变的,我会
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2023-02-08
    • 2022-10-05
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多