【问题标题】:Filtering numpy using array operations使用数组操作过滤 numpy
【发布时间】:2018-01-09 03:43:36
【问题描述】:

我正在使用 python 并尝试过滤二维数组以仅包含具有特定总和且不包含元素 0 的数组。

其他教程似乎展示了如何使用 numpy.where 过滤数组以获取满足条件的某些元素,但我试图只获取满足条件的某些数组,当然不使用循环,而是使用 numpy方法。

类似这个操作,但是使用数组和numpy:

import itertools

list_o_tuples = list(filter(lambda x: sum(x)==10 and 0 not in x, 
                    itertools.combinations(range(10),3)))
#returns [(1, 2, 7), (1, 3, 6), (1, 4, 5), (2, 3, 5)]

【问题讨论】:

    标签: python arrays numpy combinations itertools


    【解决方案1】:

    我想这就是你想要的:

    test = np.array(list(itertools.combinations(range(10),3)))
    mask = (test.sum(axis=1) == 10) & (test.all(axis=1))
    test[mask]
    

    为了提高安全性/可读性,您可能需要使用(test != 0).all(axis=1) 而不是test.all(axis=1)

    【讨论】:

    • 我觉得不错:ideone.com/1eG5F2。随时将链接添加到您的答案中。
    • 谢谢,您介意解释一下第二行是做什么的吗?我知道 np.sum(axis=1) 但不知道 a = np.array((0,1,2)) a.sum(axis=1) 或 a.all 的情况。
    • 最后,在这种情况下,有没有办法进行求和和其他操作,例如将所有元素除以 2,然后将它们相加得到 5?
    • 第二行创建一个布尔掩码,其逻辑完全符合您的要求:如果行总和为 10 并且所有元素的计算结果为 True(即在您的情况下,请参阅第二个版本的安全性和清晰度)。你当然可以使用任何更复杂的公式...最后一行然后选择掩码为True的行。
    猜你喜欢
    • 2019-01-31
    • 2021-04-17
    • 2013-04-22
    • 2020-02-13
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多