python进阶—numpy进阶(一)

内容:矩阵mat、通用函数、除法、线性计算等

1、矩阵

import numpy as np

# 创建矩阵
print("####创建矩阵####")
a = np.mat("1 2 3;4 5 6")  # 通过str创建
b = np.mat(np.arange(10).reshape(5,2))  # 通过ndarray创建
c = np.matrix(np.arange(6).reshape(3,2))  # matrix函数创建

# 矩阵的属性
print("####矩阵的属性####")
transpose_a = a.transpose  # 矩阵转置
transpose_a2 = a.T  # 矩阵转置
inverse_a = a.I  # 矩阵的逆
base_array_a = a.A # 基于矩阵的数组
hermitian_a = a.H  # 共轭元素矩阵

# 矩阵的方法
print("####矩阵的方法####")
a.all()  # 沿给定的轴判断矩阵中所有元素是否为真(0:假,1:真) true
a.any()  # 沿给定的轴判断矩阵中任意元素是否为真,只要有一个不等于0即为真 true
a.argmax()  # 沿给定的轴返回矩阵中最大元素的索引 5
a.argmin()  # 沿给定轴返回矩阵中最小元素的索引 0
arr = np.array([[0, 4, 2], [0, 0, 5]])
arr.argsort()  # 返回从小到大排序后的索引矩阵 [[0 2 1],[1 0 2]]
a.astype("float")  # 更改矩阵中元素的数据类型
a.clip(1, 2)  # 返回新的矩阵,比给定元素大的元素为2,比给定元素小的为1 [[1 2 2],[2 2 2]]
arr2 = a.copy()  # 复制一个矩阵给另一个对象
a.cumsum()  # 沿指定轴累计求和(保留中间解果)[1 3 6 10 15 21]
a.cumprod()  # 沿指定轴累计求积
a.diagonal()  # 返回对角线元素([1,5])
np.dot(a.T, b)  # 矩阵点乘
a.dump(r"C:\Users\67505\Desktop\新建文本文档.txt")  # 将矩阵存储为指定文件
a.dumps()  # 将矩阵的数据转换成字符串
a.fill(10)  # 将矩阵中所有元素填充为指定的value
a.getA()  # 返回自己(ndarray)
a.getA1()  # 返回扁平的一维数组
a.getT()  # 返回转置矩阵
a.getI()  # 返回逆矩阵
a.getH()  # 返回共轭矩阵
a.max(axis=1)  # 返回指定轴的最大值
a.min()  # 返回指定轴的最小值
a.mean()  # 返回指定轴的平均值
arr.nonzero()  # 返回非零元素的索引矩阵
a.prod()  # 返回矩阵元素的乘积 1000000
a.ptp()  # 指定轴方向最大值减去最小值
a.put([0, 1, 4], [1, 2, 8])  # 用给定的value替换矩阵指定索引对应的元素
a.repeat(3, axis=1)  # 重复矩阵中的每个元素,跨列
a.reshape((3, 2))  # 更改矩阵形状(拷贝)
a.resize((3, 2))  # 更改矩阵形状(视图)
a.sort()  # 对矩阵进行排序(视图)
a.std()
a.sum()
a.swapaxes(0, 1)  # 交换两个轴方向上的数据
a.take([1, 2, 3])  # 提取指定索引位置的数据
a.trace()
a.transpose()
a.var()
a.view()  # 返回视图

2、通用函数ufunc

        ufunc函数对象本身还有一些方法,这些方法只对两个输入,一个输出的ufunc函数有效,其他的ufunc对象调用这些方法会抛出valueError异常。

a = np.array([[1, 2, 3], [4, 5, 6]])
#  累计reduce()
np.add.reduce(a)  # [5 7 9] 默认axis=0
np.add.reduce(a, axis=1)  # [6,15]
#  累计accmulate(),保留中间计算结果
np.add.accumulate(a, axis=1)  # array([[1,3,6],[4,9,15]])
#  累计reduceat()
#  [1,2,3,3] a[0]=1,a[1]=2,a[0]+a[1]=3,a[2]=3
np.add.reduceat(np.array([1, 2, 3]), indices=[0, 1, 0, 2])
#  outer()对其两个参数数组的每两个元素的组合进行计算
'''
*| 2  3  4 
-----------
1| 2  3  4
2| 4  6  8
3| 6  9 12
4| 8 12 16
5|10 15 20
'''
np.multiply.outer([1,2,3,4,5],[2,3,4])

3、数组的除法运算(divide,true_divide,floor_division)

a = np.array([2, 6, 5])
b = np.array([1, 2, 3])
# divide和true_divide与数学中的除法定义接近,返回除法的浮点数结果(numpy version 1.13.3)
np.divide(a, b)  # [ 2.          3.          1.66666667]
np.true_divide(a, b)  # [ 2.          3.          1.66666667]
# floor_divide保留结果中的整数部分
np.floor_divide(a, b)  # [2 3 1]

     计算数组的余数(mod,remainder,fmod)

# 计算余数
a = np.arange(-4, 4)
# remainder函数逐个返回两个数组中元素相除后的余数,整除返回0
np.remainder(a, 2)  # [0 1 0 1 0 1 0 1]
# mod与remainder功能一致
np.mod(a, 2)  # [0 1 0 1 0 1 0 1]
# %为remainder的简写
print(a % 2)
# fmod函数处理负数不同,余数的正负号由被除数决定
print(np.fmod(a, 2))  # [ 0 -1  0 -1  0  1  0  1]

4、线性代数

        线性代数是数学的一个重要分支,numpy.linalg模块包含线性代数的函数,使用这个模块可以计算矩阵的逆、特征值、求解线性方程组、求解行列式

    4.1、求解矩阵的逆

print("####线性代数####")
matrix_a = np.mat(np.array([[1, 2, 3], [6, 4, 3], [2, 3, 4]]))
# 计算矩阵的逆
inverse_a1 = matrix_a.I
inverse_a2 = np.linalg.inv(matrix_a)

4.2、求解线性方程组

import numpy as np

# 解线性方程组
matrix_a = np.mat(np.array([[1, 2, 3], [6, 4, 3], [2, 3, 4]]))
b = np.array([0, 8, 3])
#使用solve函数求解齐次线性方程组
x = np.linalg.solve(matrix_a, b)
print(x)  # [-10.  29. -16.]

4.3、求解特征值和特征向量

         求解Ax=λx中的特征值λ和特征向量x,eigvals函数可以计算矩阵的特征值,eigvals求解矩阵的特征值,eig求解包含特征值和特征向量的元组

matrix_a = np.mat(np.array([[1, 2, 3], [6, 4, 3], [2, 3, 4]]))
b = np.array([0, 8, 3])
# 求解特征值
eigvals_a = np.linalg.eigvals(matrix_a)
# 求解特征向量和特征值
eig_a = np.linalg.eig(matrix_a)

4.4、奇异值分解

# 奇异值分解
U, Sigma, V = np.linalg.svd(matrix_a, full_matrices=False)
print(U, Sigma, V)
# 奇异值矩阵
sigma_matrix = np.diag(Sigma)

 

你可能感兴趣的:(python数据分析)