科学计算库--Numpy

Numpy是python数据科学计算的核心库,提供了高性能的多维数组对象及处理数组的工具
安装:pip install numpy

1.创建数组
np.arange()
函数返回一个有终点和起点的固定步长的排列,分为一个参数,两个参数,三个参数三种情况:
1> 一个参数时,参数值为终点,起点取默认值0,步长取默认值1
2> 两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1
3> 三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长
np.linspace(start, stop, num)
在指定的间隔里,函数返回固定间隔的数据,其中:
start是队列的开始值,stop是队列的结束值,num是要生成的样本数
np.random.random()
随机生成矩阵

将列表或者元组转化为数组
c = np.array([1,2,3,4])
拓展:将数组转化为列表
list1 = c.tolist()

特别注意,Numpy还提供ones、zeros、eye、empty创建特殊的矩阵
ones创建全1矩阵 ,zeros创建全0矩阵 ,eye创建单位矩阵 ,empty创建空矩阵(实际有值)

有些矩阵太大,如果不想省略中间部分,通过set_printoptions来强制NumPy打印所有数据
np.set_printoptions(threshold='nan')

import numpy as np

# 1.np.arange()
# 默认从0开始到10(不包括10),步长为1
a_1 = np.arange(10)
print(a_1)

# 从1开始到10(不包括10),步长为1
a_2 = np.arange(1,10)
print(a_2)

# 从1开始到10(不包括10),步长为2
a_3 = np.arange(1,10,2)
print(a_3)

# 2.np.linspace(start, stop, num)
# 生成首位是0,末位是10,含5个数的等差数列
b = np.linspace(0,10,5)
print(b)

# 3.np.random.random()
# 生成2行,3列的随机矩阵
c = np.random.random((2,3))
print(c)

# 4..列表转换为数组
d = np.array([1,2,4])
print(d,type(d))

# 数组转化为列表
list1 = d.tolist()
print(list1,type(list1))

# ones、zeros、eye、empty创建特殊的矩阵
# 创建3*4的全1矩阵
ones = np.ones((3,4)) 
print("\nones创建全1矩阵\n",ones)

# 创建3*4的全0矩阵
zeros = np.zeros((3,4)) 
print("\nzeros创建全0矩阵\n",zeros)

# 创建3阶单位矩阵
eye = np.eye(3) 
print("\neye创建单位矩阵\n",eye)

# 创建3*4的空矩阵
empty = np.empty((3,4)) 
print("\nempty创建空矩阵\n",empty)

2.常用的矩阵运算符
Numpy中的ndarray对象重载了许多运算符,使用这些运算符可以完成矩阵间对应元素的运算

import numpy as np
a1 = np.array([[4,5,6],[1,2,3]])
a2 = np.array([[6,5,4],[3,2,1]])

# 加法,矩阵对应元素相加
result_1 = a1 + a2
result_2 = np.add(a1,a2)
print(result_1)

# 减法,矩阵对应元素相减
result_3 = a1 - a2
result_4 = np.subtract(a1,a2)
print(result_3)

# 乘法,矩阵对应元素相乘
result_5 = a1 * a2
result_6 = np.multiply(a1,a2)
print(result_5)

# 除法,矩阵对应元素相乘
result_7 = a1 / a2
result_8 = np.divide(a1,a2)
print(result_7)

# 余数,矩阵对应元素相除后取余数
result_9 = a1 % a2
print(result_9)

3.常用的矩阵函数
同样地,Numpy中也定义了许多函数,使用这些函数可以将函数作用于矩阵中的每个元素
np.sin():对矩阵中每个元素取正弦
np.cos():对矩阵中每个元素取余弦
np.tan():对矩阵中每个元素取正切
np.exp():对矩阵中每个元素取指数函数,也就是e的幂次方
np.log():对矩阵中每个元素取自然对数
np.sqrt():对矩阵中每个元素开根号,也就是平方根

扩展:矩阵乘法(点乘)、矩阵的转置、矩阵的逆
矩阵乘法(点乘)
矩阵乘法必须满足矩阵乘法的条件,即第一个矩阵的列数等于第二个矩阵的行数。 矩阵乘法的函数为 dot
矩阵的转置
通俗的讲,也就是行列转换。矩阵转置的函数为 transpose

import numpy as np
import matplotlib.pyplot as plt 
import numpy.linalg as lg

x = np.linspace(-np.pi, np.pi, 10)

# 正弦,可视化
y_sin = np.sin(x)
plt.subplot(2,2,1),plt.plot(x,y_sin,color = 'red',marker = ".") ,plt.title("sin()")

# 余弦,可视化
y_cos = np.cos(x)
plt.subplot(2,2,2),plt.plot(x,y_cos,color = 'blue',marker = ".") ,plt.title("cos()")

# 正切,可视化
y_tan = np.tan(x)
plt.subplot(2,2,3),plt.plot(x,y_cos,color = 'green',marker = ".") ,plt.title("tan()")

plt.show()

# e的x幂次方
print(np.exp(0),np.exp(1),np.exp(2))

# 自然对数,np.log10()以10为底,np.log()以e为底
print(np.log10(5),np.log(5))

# 平方根
print(np.sqrt(1),np.sqrt(4),np.sqrt(9))

# 扩展:矩阵乘法(点乘)、矩阵的转置、矩阵的逆
a1 = np.array([[1,2,3],[4,5,6]]) 
a2 = np.array([[1,2],[3,4],[5,6]]) 

# 1.矩阵乘法(点乘)
# 只有满足,第一个矩阵的列数等于第二个矩阵的行数,才可以进行矩阵的乘法
if a1.shape[1] == a2.shape[0]:
    result_1 = a1.dot(a2)
    print("\n矩阵乘法\n",result_1)
    
# 2.矩阵的转置
result_2 = a1.transpose()
result_3 = a1.T
print("\n矩阵转置\n",result_2)

4.矩阵信息的获取
最值:获得矩阵中元素最大最小值的函数分别是max和min,可以指定关键字参数axis来获得行最大(小)值或列最大(小)值
1> axis=0 行方向最大(小)值,即获得每列的最大(小)值
2> axis=1 列方向最大(小)值,即获得每行的最大(小)值
平均值:获得矩阵中元素的平均值可以通过函数mean()。同样地,可以获得整个矩阵、行或列的平均值
1> axis=0 行方向的平均值,即获得每列的平均值
2> axis=1 列方向的平均值,即获得每行的平均值
方差:方差的函数为var(),相当于函数mean(abs(x - x.mean())**2),其中x为矩阵
1> axis=0 行方向的方差,即获得每列的方差
2> axis=1 列方向的方差,即获得每行的方差
标准差:标准差的函数为std(),相当于sqrt(mean(abs(x - x.mean())**2)),其中x为矩阵
1> axis=0 行方向的标准差,即获得每列的标准差
2> axis=1 列方向的标准差,即获得每行的标准差
中值:中值的函数是median(),调用方法为numpy.median(x,[axis]),axis可指定轴方向,默认axis=None,对所有数取中值
中值指的是将序列按大小顺序排列后,排在中间的那个值,如果有偶数个数,则是排在中间两个数的平均值
1> axis=0 行方向的中值,即获得每列的中值
2> axis=1 列方向的中值,即获得每行的中值
求和:矩阵求和的函数是sum(),可以对行,列,或整个矩阵求和
1> axis=0 行方向的求和,即获得每列的和
2> axis=1 列方向的求和,即获得每行的和

import numpy as np

a = np.array([[1,2,8],[4,5,6]])

# 1.最大值和最小值
print("获取整个矩阵的最大值:",a.max())
print("获取整个矩阵的最小值:",a.min())
# axis=0 行方向最大(小)值,即获得每列的最大(小)值
print(a.max(axis=0))
# axis=1 列方向最大(小)值,即获得每行的最大(小)值
print(a.max(axis=1))

# 2.平均值
print("获取整个矩阵的平均值:",a.mean())
# axis=0 行方向的平均值,即获得每列的平均值
print(a.mean(axis=0))
# axis=1 列方向的平均值,即获得每行的平均值
print(a.mean(axis=1))

# 3.方差
print("获取整个矩阵的方差:",a.var())
# axis=0 行方向的方差,即获得每列的方差
print(a.var(axis=0))
# axis=1 列方向的方差,即获得每行的方差
print(a.var(axis=1))

# 4.标准差
print("获取整个矩阵的标准差:",a.std())
# axis=0 行方向的标准差,即获得每列的标准差
print(a.std(axis=0))
# axis=1 列方向的标准差,即获得每行的标准差
print(a.std(axis=1))

# 5.中值
print("获取整个矩阵的中值:",np.median(a))
# axis=0 行方向的中值,即获得每列的中值
print(np.median(a,axis=0))
# axis=1 列方向的中值,即获得每行的中值
print(np.median(a,axis=1))

# 6.求和
print("获取整个矩阵的和:",a.sum())
# axis=0 行方向的求和,即获得每列的和
print(a.sum(axis=0))
# axis=1 列方向的求和,即获得每行的和
print(a.sum(axis=1))

5.改变矩阵的形状
ravel()方法:将数组维度拉成一维数组
reshape()方法:是改变矩阵的维度(不会对原值进行修改,返回是修改后结果)
resize()方法:是改变矩阵的维度(会对原值进行修改并且返回是None)

import numpy as np

a = np.array([[1,2,3,4],
             [5,6,7,8]])

# 将数组维度拉成一维数组
result_1 = a.ravel()
print(result_1)
print("原始的矩阵形状:{0}\t现在的矩阵形状:{1}".format(a.shape,result_1.shape))

# reshape()
result_2 = a.reshape(1,8)
print("\nreshape(),result_2返回的是修改后的矩阵,初始a不会发生修改")
print(result_2)
print(a)

# resize()
result_3 = a.resize(1,8)
print("\nresize(),result_3返回的None,初始a会发生修改")
print(result_3)
print(a)

6.合并和分割数组
合并:concatenate()函数里通过设定轴,来对数组进行纵向合并(axis=0,默认)和横向合并(axis=1)
分割:hsplit()函数里通过纵向分割数组,vsplit()函数里通过横向分割数组

import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])

# 1.合并
result_1 = np.concatenate([arr1, arr2], axis=0)
result_2 = np.concatenate([arr1, arr2], axis=1)
print(result_1)

# 2.分割
# 纵向分割数组为3等份
a,b,c = np.hsplit(arr1,3)
# 横向分割数组为2等份
e,f = np.vsplit(arr2,2)

 

posted @ 2021-10-21 18:07  马铃薯1  阅读(115)  评论(0编辑  收藏  举报