numpy和matplotlib基础

版权声明:希望我的博客可以为别人带去知识与便利,让那些像我曾经一样迷茫的小伙伴不再迷茫~ https://blog.csdn.net/qq_34374664/article/details/80272738

numpy基础

import numpy #引入numpy这个包
import numpy as np #引入numpy这个包并改名为np

numpy.array的性质

nparr = np.array([i for i in range(10)]) #np.array只能存一种类型,定义之后如果再加其他类型的数据会强制转换
nparr  #np.array里元素可以是向量跟矩阵
nparr.dtype #表示nparr里的数据类型
nparr = np.array([1, 2, 3.0,4])  #初始化成浮点类型
nparr.dtype
nparr.ndim #数组是几维的 如果是矩阵就是2维的
nparr.shape #数组是什么形状的
nparr.size #数组的所有元素有几个
x = nparr.reshape(2,-1) #表示将nparr变成2行x列的矩形(x自动计算),同时nparr原来的值是不变的
subx = x[:2, :1] #代表对x进行切片,如果改变subx的值,x也会改变,改变x的值,subx也会改变
subx = x[:2, :1].copy()  #如果获得一个副本 subx改变,x就不会变了
subx[0][0] = 100
A = np.full(shape=(2,2), fill_value=100)
B = np.full(shape=(2,2), fill_value=10)
mix = np.concatenate([A,B])  #这样直接合并是把列维数相同的两个矩阵堆在一起,如果维数不同报错,也可以三个[a,b,c]
mix = np.concatenate([A,B], axis = 1) #axis=0是默认的,是竖直放(又来了样本); =1是水平放(增加特征)
mix = np.vstack([A,B])  #将数组竖直拼接
mix = np.hstack([A,b])  #将数组水平拼接
x = np.arange(10)
x1, x2, x3 = np.split(x, [3,7]) #将数组以3,7为分界点分成了3快
a = np.arange(16).reshape(4,4)
a1, a2 = np.split(a, [2], axis = 1) #axis = 0,默认的,是按照行分割的,上两行,下两行;=1是按照列分割的
a1, a2 = np.vsplit(a,[2])  #对行切分 上两行  下两行
a1, a2 = np.hsplit(a,[2])  #对列切分 左两列 右两列

numpy一些常用函数

np.zeros(10)  #初始化的类型为浮点型
np.zeros(shape=(3,5), dtype=int) #形状跟数据类型 同理np.ones
np.full(shape=(3,5), fill_value=17) #这样声明数据类型为int型,改成17.0就是浮点型
np.arange(0,10,1)   #跟range一样
np.arange(0,1,0.2)  #但是range不可以以小数为步长,而arange可以以小数为步长
np.linspace(0, 20, 10) #把包含0,20的区间平均划分成10个数
np.random.seed(666) #如果补指定随机种子他每次都是随机的,一旦两个random指定了同一个随机种子,他们生成的随机数相同
np.random.randint(4, 8, size = (3,5)) #生成一个int类型的随机矩阵,注意是前闭后开,最后一个数永远取不到
np.random.random((3,2)) #参数只能一个,生成一个[0,1)区间double类型的随机矩阵,如果要生成其他区间的数适当*x+y
np.random.normal(10,100)  #生成一个均值为10,方差为100的正太分布的随机数
np.random.normal(10,100,size=(3,3)) 

numpy.array中的运算

L = [i for i in range(10)]
2*L  #对于List 他把数组乘2其实就是 首位想接重复了一遍
L = np.arange(10) 
2*L  #对于numpy.array,他支持向量的运算,所以L里的元素都变成了2倍
X = np.arange(16).reshape(4,4)
X + 2
X * 2
X ** 2 #x每个数平方
X / 2
X // 2 #取整
1 / X
np.abs(X)
np.sin(X)
np.exp(X)
np.pow(3,X) #与下面相同
3**X
np.log(x) #默认以e为底
np.log3(x)

A = np.arange(16).reshape(4,4)
B = np.full(shape=(4,4), fill_value=10)
A + B
A - B
A * B #对应元素相乘
A / B #对应元素相除
A.dot(B) #矩阵相乘
A.T #矩阵的转置

v = np.arange(4)
v + A #其实就是v与矩阵的每一行向量对应元素相加
v.dot(A) 
A.dot(v) #对于向量与矩阵做矩阵乘是,向量会自动判断应该是变行向量还是列向量
invA = np.linalg.inv(A) #逆矩阵
invA = np.linalg.pinv(A) #伪逆矩阵
A.dot(invA)

numpy.array中的聚合

A = np.arange(16).reshape(4,-1)
np.sum(A) #求矩阵所有元素和
np.max(A) #求矩阵所有元素最大值
np.min(A) 
np.sum(A, axis=0) #每一列的和
np.sum(A, axis=1) #每一行的和
np.prod(A+1) #求所有元素乘积
np.mean(A) #求所有元素平均值
np.median(A) #求所有元素中值
np.percentile(A, q = 50) #求里面50% 小于等于哪个数
np.var(X) #方差
np.std(X) #标准差

nump.array中的索引

X = np.random.normal(0, 1, size=100000)
np.mean(X)
np.std(X)
np.min(X) 
np.argmin(X) #找出最小值所在位置

x = np.arange(16)
np.random.shuffle(x) #对x向量乱序打乱
np.sort(x) #排序 但是x还是乱的
x.sort() #排序,x有序
A = np.random.randint(10, size=(4,4))
np.sort(A) #对每一行排序
np.sort(A, axis = 1) #沿着列 即对每一行排序
np.sort(A, axis = 0) #沿着行,对每一列排序
np.argsort(x) #索引, 看排完序之后,每个数对应原数列的第几个数
np.partition(x, 4) #比4小的都在前面 比4大的都在后面,但不一定是有序的
np.argpartition(x,4) #比4小的都在前面,但不是表示的是他的数值而是他所在位置

fancy index

x = np.arange(16)
ind = [3,5,8] #ind代表我想要访问的索引位置
x[ind] #输出答案
#np.random.shuffle(x)
ind = np.array([[0,2], #每个数代表在下面二维矩阵中数值的索引
              [1,3]])
x[ind]
X = x.reshape(4,4)
row = np.array([0,1,2]) #我感兴趣的行索引
col = np.array([1,2,3]) #我感兴趣的列索引
X[row, col] #获得我感兴趣的索引值,行索引与对应的列索引构成矩阵索引
X[0, col]
X[:2,col] #前两行+列索引
col = [True, False, True, True] #true代表我对这一列感兴趣
X[1:3, col]

numpy.array的比较

x = np.arange(16)
x < 3 #代表x里所有数与3做比较,用布尔类型表示
x == 3
x != 3
2 * x == 24 - 4 * x #都是符合条件就是true 否则就是false
np.sum(x <= 3) #计算有多少个<= 3的数值
np.count_nonzero(x <= 3) # true其实是1 false其实是0
np.any(x == 0) #看是否有符合条件的数值
np.any(x >= 0) #看是否全部都符合条件
np.sum((x > 3) & (x <= 10)) #看有几个满足条件的数值,因为x是数组,所以必须用& 而不是&&
np.sum(~(x == 0)) #非运算
np.sum(A % 2 == 0 , axis=1) #沿着列方向数,其实就是每一行,返回4个值

筛选子序列

x[x<5] #返回一个数值小于5的子序列
x[x % 2 == 0]
A[A[:,3]%3 == 0, :] #最后一列能被3整除的行

matplotlib 基础

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

折线图

x = np.linspace(0, 10, 100)
siny = np.sin(x)
cosy = np.cos(x)
plt.plot(x, siny, label='sin(x)') #label是图例
plt.plot(x, cosy, color = 'red', label = 'cos(x)') 
#plt.xlim(-5,15)
#plt.ylim(0, 1)
plt.axis([-1, 11, -2, 2]) #与上面两个效果一样
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.legend() #写上这个 label有作用
plt.title('title') #名字
plt.show()

这里写图片描述

散点图

plt.scatter(x, siny, alpha=0.5) #透明度
plt.show()

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_34374664/article/details/80272738