import numpy as np
import numpy.linalg as lg
if __name__=="__main__":
#矩阵的建立
a=np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])
#获取矩阵行数,列数
print(a.shape) #元祖(3,5)
print(a.shape[0]) #行数
print(a.shape[1]) #列数
#矩阵的截取
print(a[0:2]) #截取第一行到第二行
print(a[:,1:-1])#截取第二列到最后一列
print(a[0:2,1:-1])
#按条件截取
print(a>10)
print(type(a>10))
"""
[[False False False False False]
[False False False False False]
[ True True True True True]]
"""
print(type([a])) #list
print(a[a>6])
"""
一维数组
[ 7 8 9 10 11 12 13 14 15]
"""
a[a>6]=0 # >6的全部变成0
print(a)
"""
[[1 2 3 4 5]
[6 0 0 0 0]
[0 0 0 0 0]]
"""
#矩阵的合并
c=np.array([[1,2],[3,4]])
d=np.array([[5,6],[7,8]])
print(np.hstack([c,d])) #横向c拼d,行相同
print(np.vstack([c,d])) #竖向c拼d,列相同
#与list的相互转换
e=[i for i in range(1,10)]
print(e)#list[1, 2, 3, 4, 5, 6, 7, 8, 9]
print(np.array(e))
print(c.tolist())#连接了列表推导式哦哈哈哈哈
#矩阵运算
c = np.array([[1, 2], [3, 4]])
d = np.array([[5, 6], [7, 8]])
print(c+d) #矩阵之间的加法,行和列完全相同
print(c-d) #矩阵之间的减法,行和列完全相同
print(c*d) #相同位置的数的乘法,行和列完全相同, 不是矩阵乘法!!!!!!!!!!!!!!!
"""
[[ 5 12]
[21 32]]
"""
print(c/d) #相同位置的数的乘法,行和列完全相同,
print(c.dot(d)) #矩阵之间的乘法
#矩阵的转置
print(c.T)#原c不变
#逆矩阵
#import numpy.linalg as lg
print(lg.inv(c)) #必须是方阵
# #试下 不可逆的矩阵 会有什么结果
# e=np.array([[1,2],[2,4]])
# print(lg.inv(e)) #会报错:numpy.linalg.LinAlgError: Singular matrix
c = np.array([[1, 1], [4, 4]])
#获取矩阵的最大值
print(c.max())
print(c.min())
print(c.max(axis=0)) #获取每列的最大值
print(c.max(axis=1)) #获取每行的最大值
# 要想获得最大最小值元素所在的位置,可以通过argmax函数来获得
print(a.argmax(axis=1))
#获取平均值 .mean()类似
#方差
# 方差的函数为var(), 方差函数var()
# 相当于函数mean(abs(x - x.mean()) ** 2), 其中x为矩阵。
print(c.var(axis=0))#获取每列的方差
print(c.var(axis=1))#获取每行的方差
# 标准差的函数为std()。
# std()
# 相当于sqrt(mean(abs(x - x.mean()) ** 2)),或相当于sqrt(x.var())。
#求和
print(c.sum())
print(c.sum(axis=0))#对每列求和
print(c.sum(axis=1))#对每行求和
放慢语速跟我念,Avada Kedavra(阿瓦达啃大瓜)