# 矩阵操作
import numpy as np
# 1.创建numpy矩阵
'''
np.mat("1 2 3;4 5 6;7 8 9")
np.matrix([[1,2,3],[4,5,6],[7,8,9]])
np.bmat("arr1 arr2;arr1 arr2")
'''
mat1 = np.mat("1 2 3;4 5 6;7 8 9")
print(mat1)
print(type(mat1))
mat2 = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(mat2)
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
mat3 = np.bmat("arr1 arr2;arr2 arr1")
print(mat3)
"""
矩阵和数组的区别:
1.两者类型不同,用mat函数转换成矩阵后才能进行一些一维代数的操作。
2.格式区别,矩阵可以用“;”号或“,”号分隔,array()只能以","号分隔
"""
print("矩阵加法:\n", mat1 + mat2)
print("矩阵乘法:\n", mat1 * mat2)
print("矩阵减法:\n", mat1 - mat2)
print("矩阵元素相乘:\n", np.multiply(mat1, mat2))
"""
矩阵运算
T 返回自身的转置
H 返回自身的共轭转置
I 返回自身的逆转矩阵
A 返回自身数据的2维数组的一个视图
"""
print("T 返回自身的转置:\n", mat1.T)
print("H 返回自身的共轭转置:\n", mat1.H)
# numpy.linalg.LinAlgError: Singular matrix 线性错误:奇异矩阵。可知,当前矩阵不可逆
print("I 返回自身的逆转矩阵:\n", mat3.I)
print("A 返回自身数据的2维数组的一个视图:\n", mat1.A)
# 2.读写文件
"""
NumPy文件读写主要通过二进制文件读写和文件列表形式数据读写两种
save() 以二进制格式保存数据
load() 以二进制格式读取数据
savez 将多个数组保存在一个文件中
"""
arr3 = np.arange(100).reshape(10, 10)
# 保存数据
np.save("save_arr", arr3)
# 读取数组
arr4 = np.load("save_arr.npy")
print(arr4)
arr6 = np.arange(12).reshape(3, 4)
arr7 = np.arange(12).reshape(4, 3)
np.savez("savez_arr", arr6, arr7)
arrz = np.load("savez_arr.npz")
# print(arr_all)
print(arrz['arr_0'])
print(arrz['arr_1'])
"""
文本格式读写
savetxt 将数组写入csv文件中
loadtxt 从csv文件中读取数组
genfromtxt 结构化数组或缺失数据
"""
np.savetxt("arr.csv", arr6, fmt="%d", delimiter=",")
loaded_data = np.loadtxt('arr.csv', delimiter=",")
print(loaded_data)
loaded_data2 = np.genfromtxt('arr.csv', delimiter=",")
print(loaded_data2)
# 排序
import numpy as np
# 指定随机种子,随机结果相同
np.random.seed(42)
arr1 = np.random.randint(1, 100, size=10)
print("排序前:", arr1)
arr1.sort()
print("排序后:", arr1)
# 多维数组排序
arr2 = np.random.randint(1, 100, size=(3, 3))
print(arr2)
# 沿着横轴排序
arr2.sort(axis=1)
print("沿着横轴排序:\n", arr2)
# 沿着纵轴排序
arr2.sort(axis=0)
print("沿着纵轴排序:\n", arr2)
"""
间接排序
argsort 返回排序后的下标
lexsort 按照最后一个传入的数据排序
"""
arr1_1 = np.random.randint(1, 100, size=10)
print(arr1_1.argsort())
# 去重
"""
unique 函数可以找出数组中唯一的数据并返回已排序的结果
"""
print(np.unique(arr1))
print(np.unique(arr2))
# 重复n次
arr3 = np.arange(1, 4)
# 将数组重复3次
print(np.tile(arr3, 3))
# repeat(次数,axis=0|1) 0行重复 1列重复
print(arr2.repeat(3, axis=0))
print(arr2.repeat(3, axis=1))
# 常用统计函数
"""
sum 计算数组的和
mean 计算数组的均值
std 计算数组的标准差
var 计算数组的方差
min 最小值
max 最大值
argmin 最小值的索引
argmax 最大值的索引
cumsum 所有元素的累计和
cumprod 所有元素的累计积
可以设置axis参数来指定运算方向,axis=0表示沿着纵轴运算,axis=1时表示按横轴运算
"""
import numpy as np
a = np.arange(6).reshape(2, 3)
print(a)
print(a.sum())
print(a.mean())
print(a.max())
print(a.min())
print(a.sum(axis=0), a.sum(axis=1))
print(a.mean(axis=0), a.mean(axis=1))
print(a.max(axis=0), a.max(axis=1))
print(a.min(axis=0), a.min(axis=1))
print(np.std(a))
print(np.var(a))
print(np.argmax(a))
print(np.argmin(a))
print(np.cumsum(a))
print(np.cumprod(a))
print(a.ndim)