NumPy基础(四)


# 矩阵操作
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)