python的第三方包Numpy简介(2)

9.数组的形态变换

Numpy提供了reshape方法用于改变数组的形状,reshape方法仅改变原始数据的形状,不改变原始数据的值。

示例代码如下:

import numpy as np
arr = np.arange(12)  # 创建一维ndarray
arr1 = arr.reshape(3, 4)  # 设置ndarray的维度,改变其形态

以上示例代码是将一维数组形态变换为二维数组, 事实上也可以将二维数组形态展平变换为一维数组,通过ravel()函数即可实现。

示例代码如下:

import numpy as np
arr = np.arange(12).reshape(3, 4)
arr1=arr.ravel()

10.数组的排序和搜索

通过Numpyt提供的sort函数,可以对数组元素值按从小到大进行直接排序,示例代码如下:

import numpy as np
arr = np.array([5,2,3,3,1,9,8,6,7])
arr1=np.sort(arr)

 通过Numpy提供的argmax和argmin函数,可以返回待搜索数组最大值和最小值元素的索引值,如果存在多个最大值或最小值,则返回第一次出现的索引。对于二维数组而已,可以通过设置axis=0或1返回各列或者各行最大值或最小值索引。需要注意的是,索引从0开始。示例代码如下:

import numpy as np
arr = np.array([5,2,3,3,1,1,9,8,6,7,8,8])
arr1=arr.reshape(3,4)
maxindex=np.argmax(arr)
minindex=np.argmin(arr)
maxindex1=np.argmax(arr1,axis=0)#返回各列最大值索引
minindex1=np.argmin(arr1,axis=1)#返回各行最小值索引

 二、Numpy下的矩阵与线性运算

Numpy的matrix是继承自NumPy的二维ndarray对象,不仅拥有二维ndarray的属性、方法与函数,还拥有诸多特有的属性与方法。同时,Numpy中的matrix和线性代数中的矩阵概念几乎完全相同,同样含有转置矩阵,共轭矩阵,逆矩阵等概念。

(1) 创建Numpy矩阵 Numpy中可使用mat、matrix或bmat函数来创建矩阵。使用mat函数创建矩阵时,若输入matrix或ndarray对象,则不会为它们创建副本。因此,调用mat函数与调用matrix(data, copy=False)等价,示例代码如下: 

import numpy as np  
mat1 = np.mat("1 2 3; 4 5 6; 7 8 9") 
mat2 = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

(2)在矩阵的日常使用过程中,将小矩 阵组合成大矩阵是一种频率极高的 操作。在Numpy中可以使用bmat分 块矩阵函数实现,示例代码如下:

import numpy as np
arr1 = np.eye(3)
arr2 = 3*arr1
mat = np.bmat(“arr1 arr2; arr1 arr2”) 

(3)矩阵的属性和基本运算 矩阵有其特有的属性,如图所示。    

属性

说明

T

返回自身的转置

H

返回自身的共轭转置

I

返回自身的逆矩阵

        矩阵属性的具体查看方法,示例代码如下:

import numpy as np
mat = np.matrix(np.arange(4).reshape(2, 2))
mT=mat.T
mH=mat.H
mI=mat.I

(4)在Numpy中,矩阵计算和ndarray计算类似,都能够作用于每个元素,比起使用for循环进行计算,在速度上更加高效,示例代码如下:

import numpy as np
mat1 = np.mat("1 2 3; 4 5 6; 7 8 9")
mat2 = mat1*3
mat3=mat1+mat2
mat4=mat1-mat2
mat5=mat1*mat2
mat6=np.multiply(mat1, mat2) #点乘

(5)线性代数运算是线性代数是数学的一个重要分支。Numpy包含numpy.linalg模块,提供线性代数所需的功能,如计算逆矩阵、求解线性方程组、求特征值、奇异值分解以及求解行列式等。numpy.linalg模块中的一些常用函数表如图所示:

函数名称

说明

dot

矩阵相乘

inv

求逆矩阵

solve

求解线性方程组 

eig

求特征值和特征向量

eigvals

求特征值

svd

计算奇异值分解

det

求行列式

(6)计算逆矩阵 :在线性代数中,矩阵 与其逆矩阵 相乘得到一个单位矩阵 ,即 。使用numpy.linalg模块中的inv函数可以计算逆矩阵,示例代码如下: 

import numpy as np
mat = np.mat('1 1 1; 1 2 3; 1 3 6')
inverse = np.linalg.inv(mat)
A=np.dot(mat, inverse)

(7)求解线性方程组:矩阵可以对向量进行线性变换,这对应于数学中的线性方程组。numpy.linalg模块中的solve函数可以求解形如 的线性方程组,其中 为矩阵, 为一维或二维数组, 是未知变量,示例代码如下:

import numpy as np
A = np.mat("1,-1,1; 2,1,0; 2,1,-1")
b = np.array([4, 3, -1])
x = np.linalg.solve(A, b)#线性方程组Ax=b的解

(8)求解特征值与特征向量 :设 是n阶方阵,如果存在数 和非零n维列向量 ,使得 成立,则称 是 的一个特征值,非零n维列向量 称为矩阵 的对应于特征值 的特征向量。numpy.linalg模块中的eigvals函数可以计算矩阵的特征值,eig函数可以返回一个包含特征值和对应的特征向量的元组,示例代码如下:

import numpy as np
A = np.matrix([[1, 0, 2], [0, 3, 0], [2, 0, 1]])
#A_value= np.linalg.eigvals(A)
A_value, A_vector = np.linalg.eig(A)

(9)奇异值分解 奇异值分解是线性代数中一种重要的矩阵分解,将一个矩阵分解为3个矩阵的乘积。numpy.linalg模块中的svd函数可以对矩阵进行奇异值分解,返回U、Sigma、V这3个矩阵,其中,U和V是正交矩阵,Sigma是一维,其元素为进行奇异值分解的矩阵的非零奇异值,可使用dig函数生成对角矩阵,示例代码如下:

import numpy as np
A = np.mat("4.0,11.0,14.0;  8.0,7.0,-2.0")
U, Sigma, V = np.linalg.svd(A, full_matrices=False)

(10)计算矩阵行列式的值 矩阵行列式是指矩阵的全部元素构成的行列式,但构成行列式的矩阵为方阵时,行列式存在值。numpy.linalg模块中的det函数可以计算矩阵行列式的值,示例代码如下:

import numpy as np
A = np.mat("3,4; 5,6")
A_value=np.linalg.det(A)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值