欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > NumPy学习第六课(1):数组的高级索引

NumPy学习第六课(1):数组的高级索引

2024/10/26 9:53:14 来源:https://blog.csdn.net/HappyAcmen/article/details/143205350  浏览:    关键词:NumPy学习第六课(1):数组的高级索引

前言

NumPy 提供了强大的高维数组处理能力,通过高级索引(也称为索引切片),可以灵活地访问和操作数组中的元素。废话不多,直接开整!!!

使用

1、 整数数组索引

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6])
indices = np.array([0, 2, 5])
print(arr[indices])  # 输出: [1 3 6]

2、 布尔索引

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6])
boolean_indices = np.array([True, False, True, False, True, True])
print(arr[boolean_indices])  # 输出: [1 3 5 6]

3、 花式索引

大家可能对这个名称有所不解,这里解释一下什么叫做花式索引。

所谓还是索引就是指的是利用整数数组进行索引,花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。

对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素,如果目标是二维数组,那么就是对应下标的行。

花式索引跟切片不一样,它总是将数据复制到新数组中。

import numpy as np# 花式索引
a = np.arange(8)
print('原数组')
print(a)
print('\n')
print('使用花式索引后的数组')
a1 = a[[2, 5]]
print(a1)# 输出:
# 原数组
# [0 1 2 3 4 5 6 7]
# 
# 
# 使用花式索引后的数组
# [2 5]

二维数组使用花式索引

x = np.arange(56).reshape(7, 8)
print('原二维数组')
print(x)
print('\n')
print('使用花式索引后的数组')
print('二维数组读取指定下标对应的行')
x1 = x[[3, 5, 1]]
print(x1)# 原二维数组
# [[ 0  1  2  3  4  5  6  7]
#  [ 8  9 10 11 12 13 14 15]
#  [16 17 18 19 20 21 22 23]
#  [24 25 26 27 28 29 30 31]
#  [32 33 34 35 36 37 38 39]
#  [40 41 42 43 44 45 46 47]
#  [48 49 50 51 52 53 54 55]]
# 
# 
# 使用花式索引后的数组
# 二维数组读取指定下标对应的行
# [[24 25 26 27 28 29 30 31]
#  [40 41 42 43 44 45 46 47]
#  [ 8  9 10 11 12 13 14 15]]

4、 numpy.newaxis进行索引(增加维度)

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr[:, np.newaxis]  # 增加一个维度
print(reshaped_arr)
# 输出:
# [[1]
#  [2]
#  [3]
#  [4]
#  [5]
#  [6]]

5、 np.ix_进行索引(广播)

import numpy as nparr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
broadcasted_indices = np.ix_([arr1, arr2])
print(broadcasted_indices)
# 输出:
# (array([[1],
#        [2],
#        [3]]), array([[4, 5, 6]]).T)

本文提供的内容仅用于个人学习、研究,如有相关权利人的合法权利,请及时通知作者,予以删除!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com