创建array、array属性
创建array
import numpy as np
#一位数组:序列
list1 = [1,2,3,4,5]
v = np.array(list1)
print(v)
'''
[1 2 3 4 5]
'''
#二维数组:[多个一维数组构成],有两层中括号
m = np.array([list1,list1,list1])
print(m)
'''
[[1 2 3 4 5]
[1 2 3 4 5]
[1 2 3 4 5]]
'''
#三维数组[多个二维数组构成]
z1 = np.array([m,m])
print(z1)
z2 = np.array([[list1,list1],[list1,list1]])
print(z2)
'''
[[[1 2 3 4 5]
[1 2 3 4 5]
[1 2 3 4 5]]
[[1 2 3 4 5]
[1 2 3 4 5]
[1 2 3 4 5]]]
[[[1 2 3 4 5]
[1 2 3 4 5]]
[[1 2 3 4 5]
[1 2 3 4 5]]]
'''
#更高维的数组
array的属性
'''
数组的属性:最外侧中括号有几个就是几维
'''
#一维数组
v.shape
v.ndim
v.size
v.dtype
#二维数组
m.shape#array形状
m.ndim#array维度
m.size#元素数量
m.dtype#元素类型
#三维数组
z1.shape
z1.ndim
z1.size
z1.dtype
数组的升维和降维
升维
"""
数组的升维度
"""
import numpy as np
list1 = [1,2,3,4,5,6,7,8]
v = np.array(list1)
print(v)
#一维变二维【元素总数要相同:2*4=8】【-1】代表自动计算行列
#r1 = v.reshape(2,-1)
r1 = v.reshape(2,4)
print(r1)
#一维变三维
r2 = r1.reshape(2,2,2)
print(r2)
#二维变三维
r3 = r2.reshape(1,2,4)#一个2×4的三维矩阵,(2,2,2)2个2*2的矩阵
print(r3)
#resize()和#reshape()的区别:resize【不返回计算结果】【直接修改原始数组】
#r4 = v.resize(2,4)
#print(r4)#返回None
v.resize(2,4)
print(v)#其实是改变了v
降维
"""
数组的降维
"""
import numpy as np
list1 = [1,2,3,4,5,6,7,8]
v = np.array(list1)
v = v.reshape(2,2,2)
print(v)
v.ndim
'''
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
'''
#降三维降为二维
r1 = v.reshape(2,4)
print(r1)
'''
[[1 2 3 4]
[5 6 7 8]]
'''
r1 = v.reshape(1,8)
print(r1)#仍然是一个二维数组,reshpe无法将高维转化为一维
'''
[[1 2 3 4 5 6 7 8]]
'''
#将高维数据转化为1维
#ravel()
r2 = v.ravel()
print(r2)
r2.ndim
'''
[1 2 3 4 5 6 7 8]
1
'''
#flatten()可以将高维数据展平
r3 = v.flatten()
print(r3)
r3.ndim
#补充:使用shape和一个元组也可以完成一个降维度
v.shape = (2,4)
print(v)
'''
[[1 2 3 4]
[5 6 7 8]]
'''
创建特殊的array
"""
创建特殊数组:主要是为了占位
"""
import numpy as np
#创建全为0的数组zeros()
v = np.zeros(5)
r1 = np.zeros((2,3))
r2 = np.zeros((2,2,2))
#创建全为1的数组ones()
v =np.ones(5)
r1 = np.ones((2,3))
r2 = np.ones((2,2,2))
#创建全为2的数组full():arg1-->行列的元组,arg2-->元素值
r1 = np.full((2,3),2)
r2 = np.full((2,2,2),2)
#小补充eye()创建单位阵,如果多出行列就用0补充
r1 = np.eye(4)
print(r1)
r2 = np.eye(3,4)
print(r2)
'''
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]]
'''
numpy中常用的两个函数:arange()、linspace()
"""
numpy中两个常用的函数
"""
import numpy as np
#arange(start,end,step) ---->range(start,end,step)
#[左开右边=闭的区间]
r1 = np.arange(0,9,2)
print(r1)
#linspace(satrt,end,nums):eg从00开始,到1结束,生成10个刻度[左右都是闭区间]
r2 = np.linspace(0,1,10)
print(r2)
数组的选取和修改
一维数组的选取和修改
"""
一维数组的选取和修改
"""
import numpy as np
array = np.arange(9,0,-1)
print(array)
#选取某个元素
array[1]
#选取某些元素
array[[1,3,5]]
#切片【左闭右开】
print(array[1:5])
#修改某个元素
array[[1,3,5]] = 20
print(array)
#批量修改某些元素
array[0:3] = 100
print(array)
二维数组的选取和修改
"""
二维数组的选取和修改
"""
import numpy as np
array1 = np.arange(24).reshape(4,6)
print(array1)
#选取某个元素
array1[1,4]
#选取某行元素
array1[1,:]
#选取某些行
array1[1:4,:]#连续的1-3行
array1[[1,4],:]#选取1和4行
#选取某些列
array1[:,1:4]
array1[:,[1,4]]
#修改某个元素
array1[1,4] =100
#修改某行元素
array1[1,:] = 50
#修改就是在选取的基础上赋值
三维数组的选取和修改
"""
三维数组的选取和修改
"""
import numpy as np
array1 = np.arange(48).reshape(2,4,6)
print(array1)
#选取某个元素
#首先确定选取哪个二维数组,之后和二维数组的选取和修改一样
array1[1,0,0]#第一个二维数组的0行0列
#选取某行
array1[0,1,:]
#选取某些行
array1[0,1:4,:]
array1[0,[1,4],:]
#选取某列
array1[0,:,1]
#选取某些列
array1[0,:,1:4]
array1[0,:,[1,4]]
#修改就是直接在选取的基础上赋值
数组的组合和数组的切割
数组的组合
"""
数组的组合
"""
import numpy as np
array1 = np.arange(9).reshape(3,3)
array2 = 2 * array1
print(array2)
#水平组合 horizontal
np.hstack((array1,array2))
np.hstack((array2,array1))
np.stack((array1,array2,array2))
#垂直组合vertical
np.vstack((array1,array2))
#和水平组合相同
#concatenate()多个矩阵组合:axis = 1跨列,axis = 0跨行
np.concatenate((array1,array2),axis = 1)
数组的切割
"""
数组的切割
"""
import numpy as np
array1 = np.arange(16).reshape(4,4)
#水平切割
np.hsplit(array1,2)
np.split(array1,2,axis = 1)
#垂直切割
np.vsplit(array1,2)
np.split(array1,2,axis = 0)
#强制分割
np.array_split(array1,3,axis = 1)
数组的算术运算
"""
数组的算术运算
"""
import numpy as np
array1 = np.arange(1,5,1).reshape(2,2)
array2 = 2*array1
print(array1)
print(array2)
#数组的加法 【对应位置上元素的求和】
print(array1 - array2)
#数组的减法【同上】
print(array1 - array2)
#数组的乘法【同上】
print(array1 * array2)
#数组的除法【同上】
print(array1 / array2)
#数组的取余(%)【同上】
print(array1 % array2)
#数组的取整【同上】
print(array1 // array2)
数组的深拷贝和浅拷贝
直接赋值是浅拷贝,使用copy方法是深拷贝
numpy中直接赋值是浅拷贝(目的:把a和b关联起来)
numpy中copy()是深拷贝(目的:把a的值给b)
numpy内的随机模块
np.random.randint()
"""
numpy内的随机模块
"""
import numpy as np
import matplotlib.pyplot as plt
'''
randin(start,end)
产生一个随机整数
(0,10)-->左闭合右开
'''
#随机种子
np.random.seed(100)#100对应一个数字
r1 = np.random.randint(0,10)
print(r1)
#绘制直方图
a = []
for i in range(1000):#参数越大,越接近均匀分布
a0 = np.random.randint(0,10)
a.append(a0)
plt.hist(a,color = 'r')
np.random.rand()
'''
rand():0-1之间的随机浮点数
'''
#随机种子
np.random.seed(100)
r1 = np.random.rand()
print(r1)
np.random.nomal()
'''
nomal():生成符合正态分布的数据
N(0,1)
'''
r2 = np.random.rand()
print(r2)
#生成随机矩阵
r3 = np.random.randint(0,10,size = (5,5))
print(r3)
r4 = np.random.rand(5,5)
print(r4)
r5 =np.random.normal(0,1,size = (5,5))
print(r5)
numpy内一些函数的使用
"""
numpy内一些函数的使用
"""
import numpy as np
array1 = np.random.normal(size = (5,5))
print(array1)
#一些函数
#求方差
print(array1.var())
#求标准差
print(array1.std())
#求均值
print(array1.mean())
#求和
array1.sum()
#求中位数
np.median(array1)
#求和运算
#对矩阵的行求和
array1.sum(axis = 1)
#列的求和
array1.sum(axis = 0 )
numpy中的矩阵运算
"""
numpy的矩阵运算
"""
import numpy as np
#生成两个基数组
a = np.arange(4).reshape(2,2)
b = a.copy()
#矩阵的运算
##矩阵的加减乘和求逆
###加减:对应元素加减
###乘
a.dot(b)
np.dot(a,b)
###求逆
'''
a*b= E【E是单位阵】,若已知a,a乘b是单位阵,那么b就是a的逆
inv():
并不是所有矩阵都有逆,
在numpy中一个矩阵即使没有逆,也会被给一个逆(伪逆)
'''
np.linalg.inv(a)
a.dot([[-1.5, 0.5],
[ 1. , 0. ]])