Python_NumPy——入门学习(numpy基本操作)

本文详细介绍了Numpy库中关于数组的索引、切片、聚合操作,包括求和、最大值、最小值等,以及矩阵操作和广播机制,为初学者提供了中职学生学习Numpy的基础教程。
摘要由CSDN通过智能技术生成

作者:初次知晓
邮箱:lr_1052107892@outlook.com
笔记分享:百度网盘分享链接
百度云盘链接:https://pan.baidu.com/s/1VXHLlMsRvrzcY0d6W0LPsA?pwd=b8m1
提取码:b8m1

本人为中职在读学生,博客内容或有错误,我愿意接受并吸取任何人的意见
学习来源参考以下网站或视频:菜鸟教程,千锋教育系列视频,黑马程序员系列视频


初次知晓


Numpy的索引操作

Ddarray的基本操作有两种
1.索引操作
[ 1  2  3  4  5  6  7  8  9 10]
	一维数组与列表完全一致
print(a[0],a[-1])
	1 10
0,表示第一个数据
-1表示倒数第一个数据

[[2 1 1 1]
 [4 2 9 5]]
	对于二维(多维)数组,直接使用索引[0],[-1]
		print(a[0],a[-1])
			[2 1 1 1] [4 2 9 5]
	会得到该行的全部数据,因此需要进行索引嵌套
		print(a[0][0],a[-1][-1])
			2 5
	也可以简写:print(a[0,0],a[-1,-1])
				2 5
	
[[[2 1 1 1]
  [4 2 9 5]]

 [[2 1 1 1]
  [4 2 9 5]]]
	三维及以上数组有 块 的概念,因此先指定哪一块,在指定是哪一行的哪一个数据
		print(a[0,0,0],a[-1,-1,-1]) #a[0,0,0]:第一块,第一行,第一个数据  | a[-1,-1,-1]:最后一块,最后一行,最后一个数据
			2 5

索引的用处?
	1.修改指定范围的数据
		[[[2 1 1 1]
		  [4 2 9 5]]
		
		 [[2 1 1 1]
		  [4 2 9 5]]]
		我想把加粗的2改为10
			a[0,0,0] = 10
			print(a)
				[[[10  1  1  1]
				  [ 4  2  9  5]]
				
				 [[ 2  1  1  1]
				  [ 4  2  9  5]]]
		 使用这种方法还可以直接更改某一行的全部数据
			a[0,0] = 10
			print(a)
				[[[10 10 10 10]
				  [ 4  2  9  5]]
				
				 [[ 2  1  1  1]
				  [ 4  2  9  5]]]

Numpy的切片操作

切片(slice):作用是从序列中取出一部分相应的元素重新组成一个序列
一维数组:a[ 1  2  3  4  5  6  7  8  9 10]
	我想取到2-6的数据
	
		b = a[1:7]
		print(b)
			[2 3 4 5 6 7] 
特殊操作:b = a[::-1]
			[10  9  8  7  6  5  4  3  2  1]
		将数组的数据全部反转过来
对于二维的(多维)数据
		[[[2 1 1 1]
		  [4 2 9 5]]
		
		 [[2 1 1 1]
		  [4 2 9 5]]]
	
	可以直接用索引取出一行数据:b = a[0,0]
		print(b)
			[2 1 1 1]
		语法:接收变量 = 数组[(块数),行数]
		
	或者取多行 b = a[0,0:2]
		print(b)
			[[2 1 1 1]
			 [4 2 9 5]]
		语法:接收变量 = 数组[(块数),起始行:结束行]
		
	或者取不连续的多行:b = a[0,[0,1]]
		print(b)
			[[2 1 1 1]
			 [4 2 9 5]]
		语法:接收变量 = 数组[(块数),[行1,行2,…,行n]]
		
		[[2 1 1 1]
		 [4 2 9 5]
		 [2 1 1 1]
		 [4 2 9 5]]
	也可以直接取一列数据:b =a[1:4,0]
		print(b)
			[4 2 4]
		语法:接收变量 = 数组[起始行:结束行,列数]
			
	或者取连续的多列:b =a[:,2:5]
		print(b)
			[[1 1]
			 [9 5]
			 [1 1]
			 [9 5]]
		语法:接收变量 = 数组[起始行:结束行,起始列:结束列]
		
	或者取不连续的多列:b =a[:,[1,2,3]]
		print(b)
			[[1 1 1]
			 [2 9 5]
			 [1 1 1]
			 [2 9 5]]
		语法:接收变量 = 数组[起始行:结束行,[列1,列2,…,列n]]

Numpy的聚合操作

	1.求和
将数组内的值求和
	语法:接收变量 = numpy.sum(数组名,axis = None)
		axis = 0 表示计算行(行和行求和)求和(由上至下)
		axis = 1 表示计算列(列和列求和)求和(由左至右)
	n1 = np.arange(1,13)
	n2 = np.reshape(n1,(3,4))
	print(n2)
		[[ 1  2  3  4]
		 [ 5  6  7  8]
		 [ 9 10 11 12]]
	n2 = np.sum(n2,axis = 1)
	print(n2)
		[10 26 42]
	n2 = np.sum(n2,axis = 0)
	print(n2)
		[15 18 21 24]
		
2.求最大值
求一个数组中的最大值
	语法:接收变量 = numpy.max(数组名)
		
	n1 = np.arange(1,11)
	print(n1)
		[ 1  2  3  4  5  6  7  8  9 10]
	n1 = max(n1)
	print(n1)
		10
		
3.求最小值
求一个数组中的最小值
	语法:接收变量 = numpy.min(数组名)
		
	n1 = np.arange(1,11)
	print(n1)
		[ 1  2  3  4  5  6  7  8  9 10]
	n1 = min(n1)
	print(n1)
		1
		
4.求平均值
语法:接收变量 = numpy.mean(数组名)
	  接收变量 = numpy.average(数组名)
	
n1 = np.arange(1,11)
print(n1)
	[ 1  2  3  4  5  6  7  8  9 10]
n1 = np.mean(n1)//average效果一致
print(n1)
	5.5
	
5.求中位数
语法:接收变量 = numpy.median(数组名)
一组数据中排在中间位置的数,如果时项数为偶数,则求其平均值

n1 = np.arange(1,11)
print(n1)
	[ 1  2  3  4  5  6  7  8  9 10]
n1 = np.median(n1)
print(n1)
	5.5
	
6.求百分位数
语法:接收变量 = numpy.percentile(数组名,q = None)
	q = 50 表示中位数(q为百分比)
	
n1 = np.arange(1,11)
print(n1)
[ 1  2  3  4  5  6  7  8  9 10]
5.5
n1 = np.percentile(n1,50)
print(n1)
	
7.求第一个最大值下标
语法:接收变量 = numpy.argmax(数组名)

n1 = np.arange(1,11)
print(n1)
[ 1  2  3  4  5  6  7  8  9 10]
n1 = np.argmax(n1)
print(n1)
9

8.求第一个最小值下标
语法:接收变量 = numpy.argmin(数组名)

n1 = np.arange(1,11)
print(n1)
[ 1  2  3  4  5  6  7  8  9 10]
n1 = np.argmin(n1)
print(n1)
0

9. 根据条件求所有符合条件的数据下标
语法:接收变量 = numpy.argwhere(条件)

n1 = np.arange(1,11)
print(n1)
[ 1  2  3  4  5  6  7  8  9 10]

n1 = np.argwhere(n1 == np.max(n1))
print(n1)
[[9]]

10.求数组的某次方
语法:接收变量 = numoy.power(数组,次方)

n1 = np.arange(1,11)
print(n1)
[ 1  2  3  4  5  6  7  8  9 10]

n1 = np.power(n1,2)
print(n1)
[  1   4   9  16  25  36  49  64  81 100]


11.求标准差
	方差开平方根
语法:接收变量 = numpy.std(数组)

n1 = np.arange(1,11)
print(n1)
[ 1  2  3  4  5  6  7  8  9 10]
n1 = np.std(n1)
print(n1)
2.8722813232690143

12.求数组的方差
语法:接收变量 = numpy.var(数组)

n1 = np.arange(1,11)
print(n1)
[ 1  2  3  4  5  6  7  8  9 10]
n1 = np.var(n1)
print(n1)
8.25
		
		
特殊:当数组中有无法计算的非数字数据时
可以在函数前加上:nan
	标准语法格式:接收变量 = numpy.nan函数(函数参数)

Numpy的矩阵操作

基本的矩阵操作:
算术运算符:加减乘除
矩阵和矩阵之间运算
数与矩阵的运算

矩阵乘积
矩阵与矩阵相乘 numpy.dot

广播机制
为不同维度的矩阵尽量提供运算可能性
规则一:为缺失的维度补维度
规则二:缺失元素用已有值填充

基本矩阵操作

n = np.random.randint(0,10,size=(4,5))
print(n)
1.加法
[[6 5 5 8 6]
 [5 9 4 6 6]
 [3 8 4 6 3]
 [5 4 5 5 4]]
n += 10
print(n)
	[[16 15 15 18 16]
	 [15 19 14 16 16]
	 [13 18 14 16 13]
	 [15 14 15 15 14]]
2.减法
[[0 1 7 7 0]
 [0 6 7 2 3]
 [5 9 1 8 4]
 [5 8 0 0 8]]
	n -= 10
	print(n)
		[[-10  -9  -3  -3 -10]
		 [-10  -4  -3  -8  -7]
		 [ -5  -1  -9  -2  -6]
		 [ -5  -2 -10 -10  -2]]
3.除法
[[8 4 3 7 6]
 [7 3 3 7 9]
 [9 7 8 5 5]
 [6 3 2 5 8]]
	n *= 10
	print(n)
		[[80 40 30 70 60]
		 [70 30 30 70 90]
		 [90 70 80 50 50]
		 [60 30 20 50 80]]
4.除法
	[[1 1 5 5 7]
	 [4 8 4 0 9]
	 [8 9 5 8 2]
	 [5 6 2 3 3]]
	n = n / 10
	print(n)
		[[0.1 0.1 0.5 0.5 0.7]
		 [0.4 0.8 0.4 0.  0.9]
		 [0.8 0.9 0.5 0.8 0.2]
		 [0.5 0.6 0.2 0.3 0.3]]
5.整除
	[[0 6 6 3 2]
	 [6 6 8 7 8]
	 [7 3 7 5 8]
	 [1 3 0 9 4]]
	n = n // 10
	print(n)
		[[0 0 0 0 0]
		 [0 0 0 0 0]
		 [0 0 0 0 0]
		 [0 0 0 0 0]]
6.矩阵间运算
	n1 = np.random.randint(0,10,size=(4,5))
	n2 = np.random.randint(0,10,size=(4,5))
	print(n1)
		[[0 8 3 1 8]
		 [5 6 6 5 1]
		 [0 6 9 6 3]
		 [2 5 4 4 0]]
	print(n2)
		[[7 3 3 0 9]
		 [1 8 1 7 1]
		 [6 7 8 7 3]
		 [0 1 7 5 7]]
	n = n1 + n2 # 矩阵间同一位置的元素相加
	print(n)
		[[ 7 11  6  1 17]
		 [ 6 14  7 12  2]
		 [ 6 13 17 13  6]
		 [ 2  6 11  9  7]]
	矩阵间的减乘除一致

矩阵积

语法:接收变量 = numpy.dot()
		要求:第一个矩阵的列数 等于 第二个矩阵的行数
		
n1 = np.random.randint(0,10,size=(4,5))
n2 = np.random.randint(0,10,size=(5,4))
print(n1)
	[[1 2 1 2 9]
	 [3 0 1 8 1]
	 [9 0 8 3 8] 
	 [0 2 1 9 4]]
print(n2)
	[[0 4 0 8]
	 [6 2 5 7]
	 [6 2 9 5]
	 [8 3 7 5]
	 [0 4 4 8]]
n = np.dot(n1,n2)
print(n)
	[[ 34  52  69 109]
	 [ 70  42  69  77]
	 [ 72  93 125 191]
	 [ 90  49  98  96]]

广播机制

广播机制
为不同维度的矩阵尽量提供运算可能性
	规则一:为缺失的维度补维度
	规则二:缺失元素用已有值填充
		如:m = np.ones((2,3))
			a = np.arange(3)
			print(m)
			print(a)
				[[1. 1. 1.]
				 [1. 1. 1.]]
				[0 1 2]
					a,m数组在互相进行运算时,由于数组a维度缺失,因此numpy会将数组a的维度补	成与数组m相同的维度,且数组a补充的维度数据会尽量复制原维度的数据
				因此:在计算时
					x = m + a
					print(x)
						[[1. 2. 3.]
						[1. 2. 3.]]
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值