numpy学习笔记

numpy学习笔记

一、创建数组

1.导入numpy

import numpy as np

2.通过列表创造数组

np.array([1, 2, 3])	# 一维
np.array([(1,2,3),(4,5,6)])	# 二维

3.创建特殊数组

np.zeros((3, 4))	# 创建3*4的全0数组
np.ones((2, 3, 4))	# 创建2*3*4的全1数组
np.full((3, 4), 2)	# 创建全填充2的3*4数组

4.创建等差数组

np.arange(5)	#创建0~4的一维等差数组
np.arange(6).reshape(2, 3)	# 创建0~5的2*3数组
np.arange(10, 20, 2)	# 开头是10,结尾是18,步长为2
np.linspace(3,6,3).reshape(3,1) # 开头是3,结尾是6(包含6),数字总个数

5.创建随机数组

np.random.rand(2, 3)	# 创建2*3的二维随机数组
np.random.randint(15, size = (2, 3))	# 创建1~4,大小为2*3的随机整数数组
a = np.random.randint(1, 5, 10) # 创建1~4的10个整数

6.数组的形状与大小

# 输出数组的大小
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)	# (2, 3)
# 输出数组元素的总个数
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.size)	# 6
# 改变原有数组的大小
a = np.array([[1, 2, 3], [4, 5, 6]])
a.shape = (3, 2)
print(a)	# [[1 2][3 4][5 6]]
# 在副本上改变数组大小
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.reshape(3, 2)
print(b)  # a 没变
# 输出数组的维数
a = np.arange(24)
>>> a.ndim # 1

# 现在调整其大小
b = a.reshape(2, 4, 3)
>>> b.ndim	# 3

7.数组合并

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.concatenate((a, b), axis=0))  #上下合并
print(np.concatenate((a, b), axis=1))  #水平合并

二、数组索引

1.单个元素的索引

# 一维
x = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> x[2] # 2
>>> x[-2] # 8
# 多维
>>> x.shape = (2,5) # 现在 x 是一个二维数组
# array([[0, 1, 2, 3, 4],
#       [5, 6, 7, 8, 9]])
>>> x[1,3]	# 数组 x 的 第1行 第3列 对应的元素
8
>>> x[1,-1]	# 数组 x 的 第1行 最后1列 对应的元素
9
>>> x[0]	#索引索引比维度少的多维数组,则会获得一个子维数组
array([0, 1, 2, 3, 4])

2.数组切片

>>> x = np.arange(10)
>>> x[2:5]	# 索引以2开始,以5结束(不包含5)
array([2, 3, 4])
>>> x[:-7]	# 索引以0开始,到倒数第7
array([0, 1, 2])
>>> x[1:7:2]	# 索引以1开始,以7结束(不包含7),步长为2
array([1, 3, 5])
>>> y = np.arange(35).reshape(5,7)
>>> y[1:5:2,::3]
# 逗号前是数组第一维的索引,逗号后是数组第二维的索引
# 1:5:2 起始索引为 1,结束索引为5(不包含5对),步长为2
# [::3] 代表第二维索引的步长为3
array([[ 7, 10, 13],
       [21, 24, 27]])

3. 索引数组

# 获取数组中的多个值
x = np.arange(10,1,-1)	# 此次 -1 指步长为-1,即倒序
# [10,  9,  8,  7,  6,  5,  4,  3,  2]
x[[3, 3, 1, 8]]	# 对数组 x 的第4、4、2、9个元素进行索引
# [7, 7, 9, 2]
x[[3,3,-3,8]]	# 对数组 x 的第4、4、倒数第3、9个元素进行索引
# [7, 7, 4, 2]
# 获取数组中 (0,0),(1,1) 和 (2,0) 位置处的元素
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
x[[0,1,2],  [0,1,0]]  
# [1, 4, 5]

4. 布尔索引数组

y = np.arange(35).reshape(5,7)
y[y > 20]	# 取y中值大于20的元素
y[(y > 5) & (y < 10)]	# 取y中大于5小于10的元素
# 过滤空值
a = np.array([np.nan,  1,2,np.nan,3,4,5])  
print (a[~np.isnan(a)])	# [1. 2. 3. 4. 5.]

三、基础数学

1.三角函数

a = np.array([0,30,45,60,90])
# 通过乘 pi/180 转化为弧度  
print (np.sin(a/180*np.pi))	# 正弦
print (np.cos(a/180*np.pi))	# 余弦
print (np.tan(a/180*np.pi))	# 正切

2.加减乘除幂运算
需要有相同形状或者符合广播机制

import numpy as np 
 
a = np.arange(9).reshape(3,3)  
b = np.array([10,10,10])  

print (a+b)	# a+b
print (a-b)	# a-b
print (a*b)	# a*b
print (a/b)	# a/b
print (a**b)	# a**b

3.统计函数

# 最大最小值
a = np.array([[3,7,5],[8,4,3],[2,4,9]])  
print (np.min(a,1))	# 沿轴1的最小值, [3,3,2]
print (np.min(a,0))	# 沿轴0的最小值, [2,4,3]
print (np.max(a))	# 所有数中的最大值,9
print (np.max(a, axis =  0))	# 沿轴0的最大值,[8,7,9]
# 求和
a = np.array([[3,7,5],[8,4,3],[2,4,9]])  
print (np.sum(a,1))	# 沿轴1的和, [15 15 15]
print (np.sum(a,0))	# 沿轴0的和, [15 15 15]
print (np.sum(a))	# 所有数中的和,45
# 中位数
a = np.array([[30,65,70],[80,95,10],[50,90,60]])  
print (np.median(a))	# 所有数的中位数
print (np.median(a, axis =  0))	# 沿轴0的中位数
print (np.median(a, axis =  1))	# 沿轴1的中位数
# 平均值
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
print (np.mean(a))	# 所有数的平均数
print (np.mean(a, axis =  0))	# 沿轴0的平均数
print (np.mean(a, axis =  1))	# 沿轴1的平均数
# 标准差与方差
std = sqrt(mean((x - x.mean())**2))	# 标准差公式
print (np.std([1,2,3,4]))	# 标准差
print (np.var([1,2,3,4]))	# 方差

四、排序

# 按值排序
a = np.array([[3,7],[9,1]])  
print (np.sort(a))	# 沿最后的轴排序	[[3 7] [1 9]]
print (np.sort(a, axis =  0))	# 沿轴0排序 [[3 1] [9 7]]

# 返回数组值从小到大的索引值
x = np.array([3,  1,  2])  
y = np.argsort(x)  # [1, 2, 0]

五、线性代数

1.转置

a = np.arange(12).reshape(3,4)
print (a.T)

2.矩阵库

# 导入矩阵库
import numpy.matlib 
# 创建矩阵
np.matlib.empty((2,2))	# 创建2*2的空矩阵
np.matlib.zeros((2,2))	# 创建2*2的零矩阵
np.matlib.ones((2,2))	# 创建2*2的以1填充的矩阵
np.matlib.eye(n =  3, M =  4, k =  0)	# 创建一个3*4,索引开头为0,对角线元素为1的矩阵
np.matlib.identity(5)	# 创建5*5的单位矩阵
np.matlib.rand(3,3)	# 创建3*3的随机数矩阵
# 矩阵与array互相转换
j = np.asarray(i)  # 矩阵转array
k = np.asmatrix (j)  # array转矩阵

3.线性代数运算

# 	计算二维数组的矩阵乘积
a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
# [[1*11+2*13, 1*12+2*14],[3*11+4*13, 3*12+4*14]]
print(np.dot(a,b))	# [[37 40] [85 92]]
# 计算点积
a = np.array([[1,2],[3,4]]) 
b = np.array([[11,12],[13,14]]) 
# 1*11 + 2*12 + 3*13 + 4*14 = 130
print (np.vdot(a,b))	# 130
# 计算行列式
b = np.array([[6,1,1], [4, -2, 5], [2,8,7]]) 
# 6*(-2*7 - 5*8) - 1*(4*7 - 5*2) + 1*(4*8 - -2*2)
print (np.linalg.det(b))	# -306.0
# 求逆矩阵
x = np.array([[1,2],[3,4]]) 
y = np.linalg.inv(x) 
print(y)
# [[-2. ,  1. ],[ 1.5, -0.5]]
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我胡萝北

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值