综述numpy数组索引和列表索引的用法与比较

列表因为里面元素可为不同类型,例如

b = [1]
a = ["str", 1.0, 2, None, b]
print(a) # ['str', 1.0, 2, None, [1]]

所以其功能仅支持索引,切片,还有一个特殊用法:列表推导式 。

(当然List类方法有很多,对应有很多其他功能,本文这里只讨论其索引的用法)

b = [1]
a = ["str", 1.0, 2, None, b]
# 切片
print(a[::-1])  # 倒序 [[1], None, 2, 1.0, 'str']
# 索引
print(a[0])  # 列表第0个位置元素 输出 str
# 列表推导式
print([i**2 for i in range(10)])  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

接下来要介绍今天的主人公Numpy类型,NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))

Numpy型在原有索引,切片功能的基础上引入了更便捷的功能

a = np.random.randint(0, 10, (3, 3))
print(a)
#[[0 7 7]
 [5 6 2]
 [1 3 4]]

# 第一种 取第二行第二列元素
print(a[1, 1])  # 6

# 第二种 
取最外层第二个元素集
print(a[[1]])  # [[5 6 2]]
取最外层第二,三个元素集
print(a[[1,2]])
#[[5 6 2]
 [1 3 4]]

# 第三种 混合使用索引切片
print(a[:, 2])  # [7 2 4]

a[:, [0, 1]] = a[:, [1, 0]]  # 将a数组中第一列和第二列元素换位置
print(a)
#[[7 0 7]
 [6 5 2]
 [3 1 4]]

# 注意以上三种用法在List的列表中均不可用,可以理解为List索引中括号[]内只能有单个元素

 numpy的布尔索引用法

a = np.random.randint(0, 10, 10)
b = a.tolist()
print(a)  # [9 0 2 1 6 2 4 9 1 1]
c = a > 5
print(c)  # [False False  True  True  True  True False False  True  True]
print(a[c])  # [9 6 9]  # 要注意此时c的长度要和a最外层长度一样(意思是索引必须对的上)

# 列表无此用法但是可以用列表推导式得到类似结果
print([i for i in b if i > 5])  # [9, 6, 9]

布尔索引也可以跟其他功能混合使用, 例如:

a = np.random.randint(0, 10, (10, 10))
print(a)
#[[6 0 6 4 6 0 6 7 7 6]
 [3 5 3 0 8 0 3 8 3 9]
 [7 8 5 4 9 0 2 8 0 0]
 [9 5 1 1 6 2 5 3 8 4]
 [6 8 3 0 2 9 4 4 8 9]
 [1 1 0 3 2 5 9 2 3 7]
 [7 1 8 2 2 9 0 4 3 4]
 [4 8 5 8 4 0 9 3 1 5]
 [7 9 4 7 3 3 5 9 6 8]
 [8 7 8 2 3 3 6 2 8 8]]
c = a[0] > 5
print(c)
#[ True False  True False  True False  True  True  True  True]
print(a[::3, c])  
#[[6 6 6 6 7 7 6]
 [9 1 6 5 3 8 4]
 [7 8 2 0 4 3 4]
 [8 8 3 6 2 8 8]]  # 取c(a[0]>5)中元素为true的位置,在a数组中的指定行内取这些位置的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值