numpy中的布尔索引机制

        布尔索引的工作原理是,NumPy将接收的布尔数组中的True当做有效的索引位置,并从原数组中选取这些位置对应的元素。       

arr = np.arange(12).reshape(3, 4)
# arr = [[ 0  1  2  3]
#        [ 4  5  6  7]
#        [ 8  9 10 11]]

bool_idx = np.array([[True, False, True, False],
                     [True, False, True, False]
                     [True, False, True, False]])
print(arr[bool_idx])
#arr = [[0 2]
#       [4 6]
#       [8 10]]

        也就是说,布尔索引就是当数组接收到一个布尔数组时,会将内部的布尔数组中的元素和自己的内部元素一一对应。

        但在当数组大小不匹配时,NumPy有自动广播(broadcasting)的机制来处理这种情况。

        具体来说,如果布尔数组的shape比原数组的shape小,NumPy会自动对布尔数组的shape进行扩展,使其与原数组的shape相匹配。扩展规则是:在布尔数组的shape前面补1,直到其shape与原数组的shape一致为止。

import numpy as np

arr = np.arange(12).reshape(3, 4)
# arr = [[0  1  2  3]
#        [4  5  6  7]
#        [8  9 10 11]]

# 一维布尔索引
bool_idx = np.array([True, False, True]) #[3, 0]
print(arr[bool_idx])  # 广播:[3,0] --> [3,4] 
# 广播后:
#[[True, True, True, True],  
# [False, False, False, False],
# [True, True, True, True]]

# 输出: [[0  1  2  3]
#       [8  9 10 11]]



# 二维布尔索引 
bool_idx_2d = np.array([[True, False],  # [3,2]
                        [False, True],
                        [True, True]])
print(arr[bool_idx_2d])  # 广播:[3,2] --> [3,4] 将第二维*2
# 广播后:
#[[True, False, True, False],  
# [False, True, False, True],
# [True, True, True, True]]

# 输出: [[ 0  2]
#         [ 4  7]
#         [ 8  9 10 11]]

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值