在学长的邀请下,我(大一小菜鸡)将参加今年9月份的数学建模大赛
所以在这个几个月中我会时常更新,分享学习过程中的经验与建议。
希望可以帮助大家
目录
一.创建数组以及其数组类型
(1)numpy没有使用python本身的数组机制,而是提供了ndarray数组对象。该对象不但可以方便的存取数据,还提供了丰富的数组计算函数。
使用numpy的ndarrary就要导入Numpy的函数包
import numpy #直接导入函数包
import numpy as np #导入numpy函数包并指定导入包的别名
创建数组array函数以及其参数
import numpy
import numpy as np
#数据类型是整形的一维数组
a = np.array([1,2,3])
print('显示numpy里的一维数组a',a)
#数据类型是复数的一维数组
b = np.array([1,2,3],dtype=complex)
print('显示numpy里数据类型是复数的一维数组b',b)
#数据类型是浮点型的二维数组
c = np.array([[1.00,2.00],[3.01,4.02]],dtype=float)
print('显示numpy里数据类型数浮点型的二维数组c',c)
#维度为2的一维数组
d = np.array([1,2,3],ndmin = 2)
print('显示numpy里被ndmin强制要求生成最小维度是2的数组d',d)
运行结果
显示numpy里的一维数组a [1 2 3]
显示numpy里数据类型是复数的一维数组b [1.+0.j 2.+0.j 3.+0.j]
显示numpy里数据类型数浮点型的二维数组c [[1. 2. ]
[3.01 4.02]]
显示numpy里被ndmin强制要求生成最小维度是2的数组d [[1 2 3]]
(2)特殊数组:ones zeros empty
zeros 数组是全为零的数组,即数组元素全为零
ones 数组是全为一的数组 ,即数组元素全为一
empty 数组是空数组 ,即数组中所有元素全进视为零
序列数组:arange linspace
arange:与python中range差不多 参数是 开始值-结束值-步长
linspace: 等差数列 参数是:开始值-结束值-元素个数
import numpy
import numpy as np
#特殊数组
#含有6个零的数组,类型默认为浮点型
print('打印特殊数组')
a = np.zeros(6)
print('含有6个零的数组(浮点型)a是:',a)
#含有6个零的数组,类型是整形
a1 = np.zeros(6,dtype=int)
print('含有6个零的数组(整形):',a1)
#含有6个一的数组,类型默认是浮点型
b = np.ones(6)
print('含有6个一的数组(浮点型)',b)
#建立多于一维的数组 类型为整形
c = np.ones((4,4))
print('四维的一数组',c)
x = np.empty((2,4))
print(x)
print()
#序列数组
print('打印序列数组')
arr = np.arange(1,121,4)
print('用arange打印的序列数组',arr)
arrc = np.linspace(0,8,4)
print('用linspace打印的序列数组',arrc)
运行结果:
打印特殊数组
含有6个零的数组(浮点型)a是: [0. 0. 0. 0. 0. 0.]
含有6个零的数组(整形): [0 0 0 0 0 0]
含有6个一的数组(浮点型) [1. 1. 1. 1. 1. 1.]
四维的一数组 [[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000]
[0.00000000e+000 2.66795449e-321 2.35569143e+251 8.65031357e+183]]
打印序列数组
用arange打印的序列数组 [ 1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69
73 77 81 85 89 93 97 101 105 109 113 117]
用linspace打印的序列数组 [0. 2.66666667 5.33333333 8. ]
二.数组的索引和元算复制
(1)数组索引
numpy数组每一个元素都是可以访问的,和一般情况一样,索引是从零开始的。
比如在下面这个三维数组中
1 2 3 4
5 6 7 8
9 10 11 12
例如要访问‘2’可以使用
print('输出numpy1数组元素2')
print(numpy1[0][1])#按照第一行第二列
print(numpy1[:,1][0])#按照第二列第一行
具体示例
import numpy as np
import numpy
num1 = np.array([[8,6,5.2],[3.5,-8,0.59]])
print('显示nun1的所有元素',num1)
print()
print('显示num1中第一行的元素',num1[0])
print('显示num1第一行中的第二个元素',num1[0][1])
print('显示num1中第二行得第三个元素',num1[1][2])
print()
print('显示num1数组中第三列元素',num1[:,2])
print('显示num1数组中第二列元素',num1[:,1])
print('显示num1数组中第一列的第一行个的元素',num1[:,0][0])
运行结果
显示nun1的所有元素 [[ 8. 6. 5.2 ]
[ 3.5 -8. 0.59]]
显示num1中第一行的元素 [8. 6. 5.2]
显示num1第一行中的第二个元素 6.0
显示num1中第二行得第三个元素 0.59
显示num1数组中第三列元素 [5.2 0.59]
显示num1数组中第二列元素 [ 6. -8.]
显示num1数组中第一列的第一行个的元素 8.0
(2)数组运算
包含元素的加,减,乘,除,乘方,最大值,最小值
import numpy
import numpy as np
num1 = np.array([8,6,5.2])
num2 = np.array([3.5,-8,0.59])
print('数组的加法运算',num1+num2)
print('数组的减法运算',num1-num2)
print('数组的乘法运算',num1*num2)
print('数组的除法运算',num1/num2)
print()
print('数组num1的乘方运算',num1**2)
print('数组num1和num2的比较',num1>=num2)
print('num1的最大值',num1.max())
print('num2的最小值',num2.max())
print('数组num1的和',num1.sum())
print()
print('数组的点乘运算',np.dot(num1,num2))#把乘法的到的数加起来
运行结果
数组的加法运算 [11.5 -2. 5.79]
数组的减法运算 [ 4.5 14. 4.61]
数组的乘法运算 [ 28. -48. 3.068]
数组的除法运算 [ 2.28571429 -0.75 8.81355932]
数组num1的乘方运算 [64. 36. 27.04]
数组num1和num2的比较 [ True True True]
num1的最大值 8.0
num2的最小值 3.5
数组num1的和 19.2
数组的点乘运算 -16.932
[[ 1 4 9]
[16 25 36]]
(2)数组的复制
numpy数组的复制分为两种
一种数浅复制:通过数组变量的复制完成,只复制数组的引用,这样对浅复制的数组中的元素进行修改时,原数组的值也会进行相应的改变
另外一种是深复制,通过数组对象的copy完成,对复制过来的数组中的元素进行修改时,原数组的值不会改变
import numpy as np
import numpy
num1 = np.array([1,2,3,4])
num2 = num1
print('浅复制的数组num2',num2)
print('对浅复制数组num2进行修改')
num2[0] = 5
print('修改后的num2',num2)
print('修改num2后的原数组',num1)
print()
print('创建深复制的原数组')
num3 = np.ones(4,dtype=int)
num4 = num3.copy()
print('深复制的数组num4',num4)
print('对深复制数组num4进行修改')
num4[0] = 2
print('修改后的num4',num4)
print('num4被修改后的原数组',num3)
运行结果
浅复制的数组num2 [1 2 3 4]
对浅复制数组num2进行修改
修改后的num2 [5 2 3 4]
修改num2后的原数组 [5 2 3 4]
创建深复制的原数组
深复制的数组num4 [1 1 1 1]
对深复制数组num4进行修改
修改后的num4 [2 1 1 1]
num4被修改后的原数组 [1 1 1 1]
三.numpy的矩阵
矩阵是一个按照长方形矩阵排列的复数或者实数的集合
numpy的矩阵对象和数组对象差不多,不同之处在于矩阵对象的计算。
使用matrick函数创建
import numpy as np
import numpy
num1 = np.matrix([[2,4,8],[14,16,20]])
print('矩阵数据类容')
print(num1)
num2 = num1.T
print('转置后的矩阵')
print(num2)
print('矩阵的乘法')
print(num1*num2)
num3 = num1.I
print('矩阵的逆')
print(num3)
运行结果
矩阵数据类容
[[ 2 4 8]
[14 16 20]]
转置后的矩阵
[[ 2 14]
[ 4 16]
[ 8 20]]
矩阵的乘法
[[ 84 252]
[252 852]]
矩阵的逆
[[-0.22619048 0.08333333]
[-0.07738095 0.04166667]
[ 0.2202381 -0.04166667]]