numpy
P1-numpy属性
import numpy as np
# 创建矩阵(数组)的方式
array = np.array([[1,2,3],
[2,3,4]])
# 输出矩阵
print(array)
# 输出矩阵的维度
print("number of dim:", array.ndim)
# 输出矩阵的形状:几行几列
print("shape:", array.shape)
# 输出矩阵的尺寸:总共多少个元素
print("size:", array.size)
P2-numpy 的创建 array
import numpy as np
# np.array 创建矩阵, dtype参数指定类型,默认64位
a = np.array([2,23,4], dtype=int)
print(a,"\n", a.dtype)
print("-"*50)
# np.zeros((3, 4))定义三行四列的零矩阵,(3, 4)是shape参数的值
# 同理 np.ones 创建元素全部为1的矩阵, np.empty 创建空矩阵,元素近似为0
b = np.zeros((3, 4))
print(b)
print("-"*50)
# np.arange(10, 20, 2) 得到一个数列:10,12,14,16,18.
# 步长为2,起始值为10,终点为19,区间左闭右开
c = np.arange(10, 20, 2)
# c=np.arange(12) 起点从零开始,终点11,步长为1
print(c)
print("-"*50)
# reshape方法可以改变矩阵形状
d = c=np.arange(12).reshape(3,4)
print(d)
print("-"*50)
# np.linspace(1,10,5) 生成一条 区间(1,10)左闭右闭 的线段
# 区间(1,10)左闭右闭, 5:取五个数
# np.linspace 同样可以调用 reshape 方法
e = np.linspace(1,10,6).reshape((2, 3))
print(e)
P3-numpy中的基础运算
import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)
g = b.reshape(2, 2)
h = np.array([[1,1],
[0,1]])
# 矩阵减法
print(a,b)
c = a-b
print(c)
print("*"*50)
# 矩阵加法
d = a+b
print(d)
print("*"*50)
# 乘积/次方
e = b**2
print(e)
print("*"*50)
# 调用函数 np.sin/cos/tan
f = 10*np.sin(a)
print(f)
print("*"*50)
# 判断array中哪些元素大于小于等于某个数
print(b)
print(b<3)
print("*"*50)
# np的乘法
# i = g*h 逐个相乘:就是两个矩阵中相同位置的元素相乘
i = g*h
# i_dot = np.dot(g,h) 矩阵乘法 i_dot_2 = g.dot(h) 两者形式不同,都是矩阵乘法
i_dot = np.dot(g,h)
i_dot_2 = g.dot(h)
print(i)
print(i_dot)
print(i_dot_2)
print("*"*50)
# np.random.random能够生成 传入参数 的 元素在0-1之间的随机矩阵
k = np.random.random((2,4))
print(k)
# np.sum(k) 矩阵元素求和
print(np.sum(k))
# np.min(k,axis=1) 求矩阵中最小值,axis=1 表示在每一行中寻找,返回每一行中的最小值
print(np.min(k,axis=1))
# axis=0,在每一列中寻找
print(np.max(k,axis=0))
print("*"*50)
P4-numpy的基础运算2
import numpy as np
A = np.arange(2,14).reshape((3,4))
print(A)
print("-"*50)
# np.argmin(A) 求A中最小值元素的索引 np.argmax(A) 最大值
print(np.argmin(A))
print(np.argmax(A))
print("-"*50)
# np.mean(A) A.mean() np.average(A) 三种方法都是求矩阵所有元素的平均值
print(np.mean(A))
print(A.mean())
print(np.average(A))
print("-"*50)
# np.median(A) 求矩阵A元素的中位数
print(np.median(A))
# np.cumsum(A) 对矩阵A中的元素进行累加
print(np.cumsum(A))
# np.diff(A) 两两元素之间进行累差,后项减前项
print(np.diff(A))
print("-"*50)
# np.nonzero(A) 求矩阵A中的哪些元素非零,输出形式是两个列表,前列表代表行号,后列表代表列号
print(np.nonzero(A))
# np.sort(A) 对矩阵A中元素逐行升序排序
print(np.sort(A))
print("-"*50)
# np.transpose(A) A.T 对矩阵A进行转置
print(np.transpose(A))
print(A.T)
print("-"*50)
# (A.T).dot(A) A.T 与 A 进行矩阵乘法
print((A.T).dot(A))
print("-"*50)
# np.clip(A,5,9) 对矩阵A中,小于5的数全部修改为5,大于9的数修改为9,并输出矩阵
print(np.clip(A,5,9))
print("-"*50)
print("-"*50)
print(A)
# np.mean(A,axis=0) axis=0 对每一列求平均值
print(np.mean(A,axis=0))
P5-numpy的索引
import numpy as np
# # np.arange 矩阵支持索引
# A = np.arange(3,15)
# print(A)
# print(A[3])
# A = np.arange(3,15).reshape((3,4))
# print(A)
# print(A[1][1])
# print(A[1,1])
# print(A[2,:]) # 与列表切片方法类似
# # 矩阵的 for循环 默认以 行 作为循环单位
# A = np.arange(3,15).reshape((3,4))
# print(A)
#
# for row in A:
# print(row)
# # 以 列 作为循环单位的实现方法:矩阵转置
# for column in A.T:
# print(column)
# 以 元素 作为循环单位
A = np.arange(3,15).reshape(3,4)
print(A)
# A.flatten() 可以把矩阵压扁成一行
print(A.flatten())
# A.flat 循环迭代器:以元素为单位
for item in A.flat:
print(item)
P6-numpy的array合并
import numpy as np
# A = np.array([1,1,1])
# B = np.array([2,2,2])
#
# # 上下合并矩阵
# print(np.vstack((A,B))) # vertical stack
# C = np.vstack((A,B))
# # 左右合并矩阵
# D = np.hstack((A,B)) # horizontal stack
# print(A.shape,C.shape)
# print(A.shape,D.shape)
#
# # 在横向(行的方向)增加一个维度
# print(A[np.newaxis,:])
# print(A[np.newaxis,:].shape)
#
# # 在纵向(列的方向)增加一个维度
# print(A[:,np.newaxis])
# print(A[:,np.newaxis].shape)
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]
# C = np.vstack((A,B))
# D = np.hstack((A,B))
# print(D)
# print(A.shape,D.shape)
# 合并多个矩阵
# 上下合并
C = np.concatenate((A,B,B,A),axis=0)
# 左右合并
D = np.concatenate((A,B,B,A),axis=1)
print(C)
print(D)
P7-numpy的array分割
import numpy as np
A = np.arange(12).reshape(3,4)
print(A)
# 只能实现相等的分割
# 对A的列进行操作,将矩阵分成两块
print(np.split(A,2,axis=1))
# 对A的行进行操作,将矩阵分成三块
print(np.split(A,3,axis=0))
# 实现矩阵的不等分割
print(np.array_split(A,3,axis=1))
print((np.vsplit(A,3)))
print((np.hsplit(A,2)))
P8-numpy的copy&deep copy
import numpy as np
# array的赋值实际是新建一个引用,修改原来的array就是修改新的array(python的赋值原理)
a = np.arange(4)
print(a)
b = a
a[0] = 11
a[1:3] = [22,33] # 同时修改两个 item (多个)
print(b)
c = a.copy() # deep copy 赋值但是不关联(deep copy)
print(id(c),id(a),id(b))