Python数据分析 1-3 NumPy数组的索引、切片和遍历

NumPy数组的索引、切片和遍历

附加小知识:
本篇文章将会涉及到三维数组,特此做出以下补充:

我们可以将三维数组想象成为一个立方体,第一维度理解为立方体的长,第二维度理解为宽,彩色图片是3通道的,所以第三维“图片通道”想象成深度。用立方体中直观展示:
在这里插入图片描述

通过 np.zeros( ) 创建一个2行4列3个通道的三维数组,并给第1行第2列第1通道赋值为1。
得到以下结果:

[[[0 0 0]
[0 0 0]
[0 0 0]
[0 0 0]]

[[0 0 0]
[0 0 0]
[0 1 0]
[0 0 0]]]
通过观察数值(2,4,3)可以理解:这里的2行变成了2个“更大规模的行”,4列变成了4个“行”,3通道变成了3个“列”。
其实我是这样记得:行就是多少行也就是大规模的行,列就是列,而通道就是[[[ 连起来最多有几个。
该文参考的原博文:
原文链接:https://blog.csdn.net/qq_37233260/article/details/119337233
更全面的理解可以了解博文
原文链接:https://blog.csdn.net/vswyh/article/details/118068454

1 索引

# 引入NumPy
import numpy as np

2 正索引

# 一维数组
arr = np.array([4, 3, 8, 6])#创建一维数组arr
print(arr[0])               #输出arr数组的第一个元素
print(arr[3])               #输出arr数组的第四个元素
print(arr[[1,3]])           #!输出arr数组第二个和第四个元素
4
6
[3 6]
# 二维数组
arr = np.arange(12).reshape((3, 4))#创建一维数组后转化为3×4数组
print(arr)                         #输出arr
print(arr[1])                      #输出arr数组的第二行
print(arr[2])                      #输出arr数组的第三行
print(arr[2, 2])                   #!!输出arr数组的第三行第三列的元素
print(arr[[1,2], [0, 2]])          #!!输出arr数组的第二行第三列的元素和第一行第三列的元素
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[4 5 6 7]
[ 8  9 10 11]
10
[ 4 10]

3 负索引

# 一维数组
arr = np.array([4, 3, 8, 6])#创建一维数组arr
print(arr[-1])              #输出arr数组倒数第一个元素
print(arr[-2])              #输出arr数组倒数第二个元素
6
8
# 二维数组
arr = np.arange(12).reshape((3, 4))#创建一维数组后转化为3×4数组
print(arr)                         #输出数组
print(arr[-1])                     #输出数组倒数第一行元素
print(arr[-2])                     #输出数组倒数第二行元素
print(arr[-2, -2])                 #输出数组倒数第二行倒数第二列的元素
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[ 8  9 10 11]
[4 5 6 7]
6

4 正负索引混合使用

# 三维数组
arr = np.arange(12).reshape((3, 2, 2))#创建一维数组后转化为三维数组
print(arr)                            #输出arr数组
print(arr[1, -1, -2])                 #输出第二维数组倒数第一行倒数第二列的元素
[[[ 0  1]
  [ 2  3]]

 [[ 4  5]
  [ 6  7]]

 [[ 8  9]
  [10 11]]]
6

5 索引越界

arr = np.arange(5)#创建一维数组arr
print(arr)        #输出arr数组
print(arr[8])    #输出arr数组倒数第五个元素 (会报错)
[0 1 2 3 4]



---------------------------------------------------------------------------

IndexError                                Traceback (most recent call last)

<ipython-input-14-0ea15dfe446f> in <module>
      1 arr = np.arange(5)#创建一维数组arr
      2 print(arr)        #输出arr数组
----> 3 print(arr[8])    #输出arr数组倒数第五个元素 (会报错)


IndexError: index 8 is out of bounds for axis 0 with size 5

6 通过索引修改数据

# 遍历
arr = np.array([4, 5, 2, 6])#创建一维数组arr
print(arr)                  #输出arr数组
arr[0] = 10                 #将arr数组第一个元素重新赋值为10
print(arr)                  #输出arr数组
[4 5 2 6]
[10  5  2  6]

7 切片

numpy.random.randint()函数可以返回一个随机整型数,范围从低[low,high),其主要参数如下:

low:生成的数值最低要大于等于low,整数
high:生成的数值最低要小于high,整数(可选)
size:输出随机数的尺寸,整数或整数序列

arr = np.random.randint(low=1, high=100, size=10)#创建一个随机的数组arr
print(arr)                                       #输出arr数组
print(arr[1:5])                                  #输出arr数组第二个到第五个的元素,数组左闭右开,取不到右边的数
print(arr[:3])                                   #输出数组前三个元素
print(arr[6:])                                   #输出数组第七个元素后的全部元素
print(arr[::-1])                                 #逆序输出数组
print(arr[1:8:2])                                #输出数组第二个元素到第八个元素之间步长为2 的元素
[88 34 66 40 69 60 42 77  5 32]
[34 66 40 69]
[88 34 66]
[42 77  5 32]
[32  5 77 42 60 69 40 66 34 88]
[34 40 60 77]
arr = np.arange(24).reshape((4, 6))#创建一个4×6的数组arr
print(arr)                         #输出arr数组
print(arr[:3, 4:])                 #输出前三行和后两列相交的元素
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
[[ 4  5]
 [10 11]
 [16 17]]
# 一维数组,直接遍历获得元素
arr = np.array([8, 4, 6, 1])#创建数组arr
print(arr)                  #输出arr数组
for ele in arr:             #循环遍历arr中的每一行
    print(ele)              #输出元素
[8 4 6 1]
8
4
6
1
# 二维及以上高维数组,从最外层遍历
arr = np.arange(12).reshape((3, 4))#创建一个3×4的数组arr
print(arr)                         #输出arr数组
for row in arr:                    #循环遍历arr中的每一行
    print(row)                     #输出每一行的元素
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[0 1 2 3]
[4 5 6 7]
[ 8  9 10 11]
# 高维数组遍历所有元素
arr = np.arange(12).reshape((3, 4))#创建一个3×4的数组arr
print(arr)                         #输出arr数组
for row in arr:                    #遍历数组的每一行
    for col in row:                #遍历每一行的所有元素
        print(col)                 #输出元素
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
0
1
2
3
4
5
6
7
8
9
10
11

flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。

# 高维数组遍历所有元素
arr = np.arange(12).reshape((3, 4))#创建一个3×4的数组arr
print(arr)                         #输出arr数组
for ele in arr.flat:               #遍历arr数组的每一个元素         
    print(ele)                     #输出元素
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
0
1
2
3
4
5
6
7
8
9
10
11
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值