猿问

Python 2d 数组布尔归约

我有一个由布尔值(真、假)组成的二维数组。我想根据内容的逻辑函数将数组合并为一维。


例如 输入:


[[True, True, False],

 [False, False, False],

 [True, True, True]]

输出(逻辑与):


[False,

 False,

 True]

如果没有循环,这将如何完成?


湖上湖
浏览 187回答 3
3回答

料青山看我应如是

我假设您想对行应用逻辑与。你可以申请numpy.all。>>> import numpy as np>>> a = np.array([[True, True, False], [False, False, False], [True, True, True]])>>> aarray([[ True,  True, False],       [False, False, False],       [ True,  True,  True]])>>> >>> np.all(a, axis=1)array([False, False,  True])对于没有 的解决方案numpy,您可以使用operator.and_和functools.reduce。>>> from operator import and_>>> from functools import reduce>>> >>> lst = [[True, True, False], [False, False, False], [True, True, True]]>>> [reduce(and_, sub) for sub in lst][False, False, True]编辑:实际上,reduce在这种特殊情况下有点多余。>>> [all(sub) for sub in lst][False, False, True]也能完成这项工作。

偶然的你

你也可以在没有 NumPy 的情况下做到这一点。这是使用列表理解的一种解决方案。说明:它将遍历子列表,即使每个子列表中的一项是False,它也会输出Falseelse True。inp = [[True, True, False],[False, False, False],[True, True, True]]out = [False if False in i else True for i in inp]print (out)# [False, False, True]如下 Jean 建议的替代方案(不那么冗长):out = [False not in i for i in inp]
随时随地看视频慕课网APP

相关分类

Python
我要回答