# 常用库numpy
import numpy as np
array1 = np.array([1,2,3,4])
print(array1) # [1 2 3 4]
array2 = np.array([
[1,2,6,9],
[3,4,8,9],
[3,5,9,9],
[3,5,7,9],
])
print(array2)
"""
[[1 2]
[3 4]]
"""
print(array1.shape) # (4,) 显示列的数量
print(array2.shape) # (2,2) 显示行,列
print(array1.dtype) # int32
print(array2.dtype) # float64 字符串类型是S1 类型
array2.astype(float)
# 含有一个浮点就是浮点,含有一个字符就是字符类型
print(array2==2)
"""
[[False True]
[False False]]
"""
print(array2.min()) # 返回矩阵最小值
# =================================
# 从文本数据获取数据 逗号分开,按照字符类型, 返回 记录组成的矩阵
# np.genfromtxt("path",delimiter=",",dtype=str)
# 从矩阵中取值 x[m,n]
# ==========================
# 矩阵切片 x[:,0:2] 获取矩阵的所有行,0-2列
print(array2)
vec = array2==9
print(vec)
array2[vec]=100
print(array2[vec]) # [9 9 9 9 9] 显示了矩阵中所有的
# ========================================================================================
(array1==10) & (array2==5) # 返回矩阵, 符合 以前学过的 或,与
# 常用函数
print(array2.sum(axis=1)) # [109 115 208 115] 每行的总和
print(array2.sum(axis=0)) # [ 10 16 121 400] 每列的总和
matrix = np.arange(12) # [ 0 1 2 3 4 5 6 7 8 9 10 11]
print(matrix)
print(matrix.reshape(3,4)) # 转为3行 2列矩阵,注意元素个数不能多不能少
# 空矩阵
kong = np.zeros((3,4)) # 创建3行4列全为0的矩阵 float类型
print(kong)
# 指定值的矩阵
defau = np.ones((2,3,4),dtype=np.int) # 三维 3行 4列, 2 个 int 类型
print(defau)
# 从10开始 30 步长为5
np.arange(10,30,5) # [10,15,20,25] 不包含30
# 随机模块
np.random.random((2,3)) # 两行三列 -1 到 1之间的
# 在区间内随机取值
np.linspace(0,9,20) # 0到9之间随机20个值, 包含0,9
# 对于shape 相同的
# 就是对应位置相减
# 对应位置相乘(A*B) shape不变
# 对于shape不同
# 如矩阵减去1 表示所有位置减1
# array1**2 表示所有元素平方
# A.dot(B)或np.dot(A,B) 真正的矩阵乘法,需要符合 可相乘的条件
# e的n次幂 np.exp(n)
# 舍弃小数
print(np.floor([1,2.4,0.736,-987,15])) # [ 1. 2. 0. -987. 15.] 变为浮点整数
# matrix.ravel() 矩阵 拉平 按照第一行接 第二行方式
# array2.shape = (8,2) 修改矩阵的形状
# array2.reshape(8,-1) 与上边功能相同 8行 此时 列数自动计算
# np.hstack(矩阵1,矩阵2) 横着拼接 ,注意行相同
# np.vstack(矩阵1,矩阵2) 垂直拼接,注意列相同
# np.hspilt(矩阵,n) 水平切分 分为n份
# np.hspilt(矩阵,(m,n)) 水平切分 从m列后切开,从n列后切开
# 垂直切开与水平类似
# ==============================
# np 中的向量,矩阵都是引用对象,赋值时是引用传递,
# 浅复制 a=b 此时a,b指向同一个 a,b完全相同 ,修改一个,另一个变化
# c = b.view() c is b --->Flase 修改shape 另一个不会变,但修改某个值,都会变化
# 即b,与b.view() 公用数值部分 ,只有部分相同,其他都不同
# d = b.copy() d用b的值进行初始化,创建的d,创建后,两者每关系了
# =========================================
max_line = array2.argmax(axis=0) # 每列进行比较 [x,y,z] x矩阵第一列中最大的元素的下标,y为第二列
array2[max_line,np.arange(array2.shape[1])] # 输入 那些最大值所在行,以及列数 最后返回矩阵中 每列的最大值
three = np.tile([[1,2],[3,4]],(2,3)) # 以 array2 行变为原来2倍,列变为3倍
"""
[[1 2]
[3 4]]
[[1 2 1 2 1 2]
[3 4 3 4 3 4]
[1 2 1 2 1 2]
[3 4 3 4 3 4]]
"""
np.sort(array2,axis=1) # 返回一个矩阵 ,是array2 矩阵所有行排序后的
array2.sort(axis=1) # 在矩阵上直接修改
array4 = np.array([23,45,67,1])
index = np.argsort(array4) # [3 0 1 2] 返回的是 array4 排序(默认升序)后 对应数值原来的下标
# 排序应为 [1 23 45 67] 3就是1 原来的索引,0是23原来的索引
# 此时
print(array4[index]) # 返回的其实就是 排序后的矩阵[1 23 45 67]