Python中的布尔数组

2025年1月5日 | 阅读6分钟

在本文中,您将学习如何创建布尔数组以及如何在代码中使用它们。

什么是布尔数组?

我们都知道数组是相同类型元素的连续集合。布尔数组专门存储布尔值(“真”和“假”)。

示例

可以使用各种技术和库(如 NumPy 和内置 Python 数据结构)来创建布尔数组。这些数组通常用于逻辑运算、过滤数据和数据操作期间的掩码。

Boolean Array in Python

真值和假值的概念

真值

  • True:True 是一个布尔数据类型,其值始终为真,这意味着在 Python 中它被视为真。
  • 非零数字:任何非零的数字值,包括整数、浮点数和复数,都被视为真。例如,1、2.5 和 -3.14 都为真。
  • 非空序列:非空序列,如列表、元组、集合和字符串,都为真。
  • 非空容器:非空字典和定义了 __bool__() 或 __len__() 方法(返回 True)的用户定义对象为真。
  • 自定义对象:如果自定义对象定义了一个 __bool__() 或 __len__() 方法,该方法返回正整数或 True,它将被视为真。

假值

  • False:False 是一个始终被视为假的布尔值。
  • 零:需要注意的是,数字 0,无论是整数还是浮点数,都被视为假。
  • 空序列:空序列,如列表、元组、集合和字符串,都被视为假。
  • 空容器:空字典在布尔上下文中被求值时被视为假。
  • None:唯一的 None 值被视为假。
  • 自定义对象:如果自定义对象具有 __bool__() 或 __len__() 方法,该方法返回 False 或 0,它将被视为假。

创建布尔数组

1. 使用列表推导式

您可以使用列表推导式从 Python 列表中创建布尔数组。例如

示例

输出

[True, True, False, True, False]

说明

在此示例中,布尔数组 is_even 表示数据中的每个元素是否为偶数。

2. 使用 NumPy

NumPy 库提供了强大的工具来创建和操作布尔数组。以下是使用 NumPy 创建布尔数组的示例

程序

输出

[False  True False  True False]

说明

is_even 数组的长度将与 data 相同,其中元素为偶数的位置为 True,否则为 False。

3. 使用 bool 函数

示例

展示被视为真或假的值的小型示例程序。

程序

输出

[False, True, True, True, False, True, True]

说明

  • None 被转换为 False。
  • 非零的数字值被转换为 True。
  • 布尔值 True 保持为 True。
  • 非空字符串被转换为 True。
  • 数字值 0 被转换为 False。

执行代码后,Boolean_Array 将包含布尔值,指示 list1 中每个元素的真值。

4. 使用 astype

NumPy 提供了一个名为 astype() 的方法,该方法允许您修改 NumPy 数组的数据类型。此方法将使您能够为数组元素指定新的数据类型。当您使用 astype() 时,会返回一个具有所选数据类型的新数组,而原始数组保持不变。

程序

输出

[False  True  True  True False False]

说明

该代码创建了一个 NumPy 数组 arr,其元素为 [0, 1, 2, 3, 0, 0],然后使用 astype(bool) 方法将其转换为布尔 NumPy 数组 truthiness。此转换会将每个等于 0 的元素设置为 False,并将所有其他非零值设置为 True。

5. 使用 dtype

当您在 NumPy 中创建布尔 NumPy 数组时,显式将 dtype 指定为 bool,该数组将由 bool 数据类型的元素组成。bool 数据类型表示布尔值,其值只能为 True 或 False。

程序

输出

[ True  True  True]

说明

该代码创建了一个名为“arr”的 NumPy 数组,其元素为 [1.0, 2.0, 3.0]。通过“dtype”参数将数组的数据类型显式设置为 bool。当您将数据类型设置为 bool 时,NumPy 会将非零值解释为 True,将零值解释为 False。这意味着数组中的任何非零元素都将被视为 True,零元素将被视为 False。

程序

输出

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

说明

该代码创建了一个名为 A 的 NumPy 数组,其形状为 (3, 4) 且数据类型为布尔类型。数组中的值会根据提供的值显式转换为布尔值。输出显示了原始数组中值的布尔表示形式,其中非零值转换为 True,零值转换为 False。

6. 使用逻辑运算

您可以对现有的布尔数组执行逻辑运算来创建新的布尔数组。

  1. logical_and():此函数在多个数组之间执行元素级的逻辑 AND,返回一个布尔数组,其中当输入数组中的所有相应元素都为 True 时,每个元素都为 True,否则为 False。
  2. logical_or():此函数在两个或多个数组之间执行元素级的逻辑 OR,结果是当任何相应的输入元素为 True 时,该元素为 True 的布尔数组。
  3. logical_not():此函数对单个数组执行元素级的逻辑非运算,返回一个与输入数组对应的元素值被反转的布尔数组。

程序

输出

Logical And:  [ True False False False]
Logical Or:  [ True  True  True False]
Logical Not:  [False False  True  True]

说明

logical_and 数组将包含 arr1 和 arr2 的元素级逻辑 AND,这意味着它仅在 arr1 和 arr2 都为 True 的位置为 True。

logical_or 数组将包含 arr1 和 arr2 的元素级逻辑 OR,这意味着在 arr1 或 arr2 为 True 的位置为 True。

logical_not 数组将包含 arr1 的元素级逻辑 NOT,这将反转 arr1 中的布尔值。

7. 使用关系运算符

NumPy 提供了一种简单便捷的方法来对数组执行元素级的关系运算符运算。您可以使用这些运算符来创建布尔数组。

程序

输出

[False False False True True]

说明

在此示例程序中,当关系运算符 > 应用于 NumPy 数组 arr 的每个元素时,会生成一个名为 bool_array 的布尔数组。对于大于 3 的元素,bool_array 中的值为 True;对于小于或等于 3 的元素,值为 False。

结论

使用 NumPy 创建的布尔数组在数据分析、逻辑运算和条件控制的编程中至关重要。

布尔数组是 Python 中的一个关键概念,经常用于逻辑运算和数据过滤。无论您是使用标准 Python 列表还是更高级的数据结构(如 NumPy 数组),理解布尔数组对于许多编程和数据分析任务都至关重要。

总而言之,扎实掌握布尔数组是成为一名熟练的 Python 程序员的关键。