numpy数组的列表索引

numpy数组的列表索引与布尔索引

使用numpy数组时经常会用到列表索引与布尔索引,以此为计算提供便利和捷径。

题设

有如下矩阵:

import numpy as np

a = np.array(
    [[0,  1,  2,  3],
     [10, 11, 12, 13],
     [20, 21, 22, 23],
     [30, 31, 32, 33],
     [40, 41, 42, 43],
     [50, 51, 52, 53]]
)

列表索引

用列表索引numpy数组:
1.单维索引取全部

# 用列表去索引numpy数组,只在一个维度索引,其余维度的值都取
a_0 = [0, 2, 4]
print(a[a_0, ...])  # 索引第0 2 4 行,全部列的元素
'''
打印输出:
[[ 0  1  2  3]
 [20 21 22 23]
 [40 41 42 43]]
'''
a_1 = [1, 3]
print(a[..., a_1])  # 索引第1 3 列,全部行的元素
'''
打印输出:
[[ 1  3]
 [11 13]
 [21 23]
 [31 33]
 [41 43]
 [51 53]]
'''

2.多维索引形相同

# 在多个维度索引,每个维度的索引列表形状要相同
a_2 = [1, 2]
a_3 = [1, 2]
print(a[a_2,a_3])  # 索引多个维度,形状要相同
'''
取第一行第一列的元素是a[1,1]
取第二行第二列的元素是a[2,2]
那么,a[[1,2],[1,2]]是取什么?
答:先取第一行第一列,再去第二行第二列,一共两个数。
打印输出:
[11 22]
'''
# 如果想取第一、二行的第一、二列的元素怎么办呢:
print(a[1:3,1:3])
'''
打印输出:
[[11 12]
 [21 22]]
公式:numpy.ndarray[start:end:step, start:end:step] 左闭右开(包含start不包含end),step为步长,步长为1可以省略
'''

布尔索引

常见的两种情况:索引首个维度与对应位置索引

  1. 索引首个维度

# 布尔索引
# 1. 首个维度
t = [True, False, False, False, False, True]
print(a[t, ...])
'''
索引首个维度,索引第二个维度会出错
打印输出:
[[ 0  1  2  3]
 [50 51 52 53]]
'''
  1. 对应位置索引
# 2. 对应索引
t = np.array(
    [[False, True, True, True],
     [True, True, True, True],
     [True, True, True, True],
     [True, True, True, True],
     [True, True, True, True],
     [True, True, True, False]]
)
print(a[t])
'''
数组的每个位置都对应一个布尔值,返回的结果会被排成一行。
打印输出:
[ 1  2  3 10 11 12 13 20 21 22 23 30 31 32 33 40 41 42 43 50 51 52] 首尾两个值未被索引到
'''
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值