python numpy库学习之数组访问

import numpy as np

# 访问数组的元素,可以分为访问某个具体位置,某一行、某一列、连续的几个位置、不连续的几个位置、满足特定条件的位置(比如
# 数组中所有的值大于a的元素、所有是虚数的元素、不是无穷大NAN的元素等)

a0 = np.array([1, 4, 2, 5, 3])
print(a0)

# b = a0[1:3]   # 利用:切片获取的新数组是原始数组的一个视图,也就是说b的起始地址和a0[1]相同,连续的几个位置
# print(a0, '\n', b)
# print(id(b))
# print(a0)
# b[0] = 100
# print(a0, '\n', b)

# c = a0[1]  # 利用下标索引就不是一个视图了,而是把数据复制到了一个新内存地址存放着
# print(c)
# c = 10
# print(c)
# print(a0)

# d = a0[0:4:2] #冒号分隔切片参数 [start:stop:step] 来进行切片操作,不连续的几个位置,但这几个位置之间的步长一样
# print(d)
# d[0] = 24
# print(a0)

# e = a0[1:]  #提取1索引以后的所有元素,也只是原始数组的一个视图,连续的几个位置
# print(e)
# e[2] = 50
# print(e)
# print(a0)

# #通过slice函数来产生一个索引数组(好像不是数组,类型是<class 'slice'>)  感觉这个不常用
# s = slice(0, 4, 2)
# print(type(s))
# t = a0[s]
# print(t)
# t[0] = 10   #可以看到这样切片产生的也只是原始数组的一个视图,不连续的几个位置,但这几个位置之间的步长一样
# print(a0)

# f = a0[a0 > 3]   #注意这样索引得到数组f不是原始数组的一个视图了,而是单独的开辟了一个地址来存放数据
# print(a0 > 3)
# print(f)

# f[1] = 60
# print(f)
# print(a0)

# g = a0[[0, 2, 4]]  #注意这样用列表来索引得到数组也不是原始数组的一个视图了,而是单独的开辟了一个地址来存放数据 不连续的几个元素
# print(g)
# g[0] = 20
# print(g)
# print(a0)

# p = [True, False, False, True, False]
# print(a0[p])

#总结:用列表来索引的都是讲数据复制到一个新内存(a0>3产生的也是一个布尔数组),用:切片的都是原始数组的一个视图

#二维数组的情况
# a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
# print(a)
# a1 = a[1]   #是原始数组的一个视图,访问第二行
# print(a1)
# a1[0] = 100
# print(a1)
# print(a)
#和一维数组一样,用列表来索引的都是将数据复制到一个新内存,用切片的都是原始数组的一个视图,后面我就不继续切片改变值了
#下面就讲讲二维的访问
# a2 = a[2][1]  #访问具体位置
# print(a2)
# a2_1 =a[2, 1]
# print(a2_1)

# a3 = a[1, :]  #访问某一行
# print(a3)
# a3_1 = a[1]  #访问某一行
# print(a3_1)
# a3_2 = a[1, ...]  #访问某一行
# print(a3_2)
# a3_2[0] = 50
# print(a3_2)
# print(a)

# a4 = a[:, 1]  #访问某一列
# print(a4)
# a4_1 = a[..., 1]   #访问某一列
# print(a4_1)

# a5 = a[1:]  #访问从某行开始剩下的所有行
# print(a5)
# a5_1 = a[0:3:2]  #访问不连续的几行 
# print(a5_1)
# a5_2 = a[0:2]  #访问连续的几行
# print(a5_2)

# a6 = a[:, 1:2]  #访问连续的几列
# print(a6)
# a6_1 = a[:, 0:3:2]
# print(a6_1)

#访问没有规则的不连续的几行或者几列,用列表来索引 ,将数据复制到一个新内存
# a7 = a[[0, 2]]
# print(a7)
# a7[1] = 100
# print(a7)
# print(a)

# a8 = a[:, [0, 1]]
# print(a8)
# a8[1,0]=120
# print(a8)
# print(a)

#访问多个特定位置,用两个列表,比如说我要得到(0,2),(1,0),(2,1),(2,2)
# a9 = a[[0, 1, 2, 2], [2, 0, 1, 2]]
# print(a9)

# a10 = a[0:2, 1:3] #从原始数组获取一个小的数组,相当于从大矩形中扣一个小矩形
# print(a10)


# c = a[[1, 2]] #使用列表作为下标得到的数组不和原始数据共享数据
# #等价于c = a[[1, 2],:]
# print(c)
# c[0] = 200
# print(c)
# print(a)

a0[[1, 2, 3]] = 200,300,400
print(a0)

哔哩哔哩视频地址 https://www.bilibili.com/video/BV16v411v7RL

python numpy库学习之数组访问

猜你喜欢

转载自blog.csdn.net/qq_43657442/article/details/107972989