为了账号安全,请及时绑定邮箱和手机立即绑定

Python 2d 数组布尔归约

Python 2d 数组布尔归约

湖上湖 2021-07-17 18:11:07
我有一个由布尔值(真、假)组成的二维数组。我想根据内容的逻辑函数将数组合并为一维。例如 输入:[[True, True, False], [False, False, False], [True, True, True]]输出(逻辑与):[False, False, True]如果没有循环,这将如何完成?
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

我假设您想对行应用逻辑与。你可以申请numpy.all。


>>> import numpy as np

>>> a = np.array([[True, True, False], [False, False, False], [True, True, True]])

>>> a

array([[ 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]

也能完成这项工作。


查看完整回答
反对 回复 2021-07-20
?
偶然的你

TA贡献1841条经验 获得超3个赞

你也可以在没有 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]


查看完整回答
反对 回复 2021-07-20
  • 3 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信