python 科学计算库NumPy—矩阵运算

NumPy库的核心是矩阵及其运算。

使用array()函数可以将python的array_like数据转变成数组形式,使用matrix()函数转变成矩阵形式。

基于习惯,在实际使用中较常用array而少用matrix来表示矩阵。

然后即可使用相关的矩阵运算了

import numpy as np
a = [[1,2,3],[4,5,5],[4,5,5]]

len = a.shape[0] #多维数组的行数
print(a.dtype) #输出元素类型
#另外也还可以使用切片方式来处理数组

然后是涉及到的ufunc(universal function)运算,它是一种能对数组的每个元素进行操作的函数。NumPy内置的许多ufunc函数都是在C语言级别实现的,因此它们的计算速度非常快。

1 >>> x = np.linspace(0, 2*np.pi, 10)
2 # 对数组x中的每个元素进行正弦计算,返回一个同样大小的新数组
3 >>> y = np.sin(x)
4 >>> y
5 array([  0.00000000e+00,   6.42787610e-01,   9.84807753e-01,
6          8.66025404e-01,   3.42020143e-01,  -3.42020143e-01,
7         -8.66025404e-01,  -9.84807753e-01,  -6.42787610e-01,
8         -2.44921271e-16])

有的通用运算函数有:

np.sin()

np.cos()

np.add(a,b)

a.sum(axis=0,1)#axis为0计算全部数据的和,为1则按行计算数据的和

等等其它矩阵可参与的数据计算。

a = array([[1,2,3],[2,3,4]])

array(list): 创建矩阵或高维向量,例如a = array([[0,1,2,3],[4,5,6,7]]),传入参数也可以是元组

shape: 表示向量大小的元组,例如a.shape结果为tuple,形如(2,3)

ndim: 表示矩阵或高维向量的维数,例如矩阵a的a.ndim为2

size: 表示向量总元素数

itemsize: 表示元素所占字节数

nbytes: 表示向量所占字节数

real: 所有元素的实部,返回的还是矩阵形式

imag: 所有元素的虚部,返回的还是矩阵形式

flat: 用一维数组表示矩阵或高维向量(常用于顺序遍历)

T: 表示矩阵的转置矩阵(也适用于高维向量),例如:a.T

zeros(shape): 创建全0矩阵或高维向量,例如a = zeros((2,3))

ones(shape):创建全1矩阵或高维向量,例如a = ones((2,3))

add(matrix):将矩阵对应元素相加,结果相当于直接用加号

dot(matrix) 
矩阵乘法,注意必须满足“能乘”的要求 
如果是*,则需注意:

 1 aaa = array([[10,9,8],[7,6,5],[42,33,2]])
 2 a = aaa.min(0)  #取每一列的最小值,返回的是一个数组
 3 aaa*aaa#相当于aaa**2:
 4
 5 #[[ 100,   81,   64],
 6 # [  49,   36,   25],
 7 # [1764, 1089,    4]]
 8
 9 aaa*a  #aaa每行元素分别与a相乘,结果为
10
11 #[[ 70,  54,  16],
12 # [ 49,  36,  10],
13 # [294, 198,   4]]
14
15 a*aaa  #结果与上相同
16 3*aaa  #aaa中每个元素乘以3

reshape(shape) 
得到改变形状的矩阵,例如a = array([[1,2,3],[4,5,6]]).reshape((3,2))的结果为[[1,2],[3,4],[5,6]]。注意矩阵的大小不能改变,即reshape的参数表示的矩阵元素数必须等于原矩阵的元素数。 
transpose() 
得到矩阵的转置矩阵,a.transpose()相当于a.T 
swapaxes(d1,d2) 
调换给定的两个维度 
flatten() 
返回对应一维向量,例如:

1 aaa = array([[10,9,8],[7,6,5],[42,33,2]])
2 aaa.flatten()
3 #返回值为:
4 array([10,  9,  8,  7,  6,  5, 42, 33,  2])

tolist() 
得到矩阵对象转化为list的结果

1 aa = aaa.tolist()
2 aa返回为list型(每一行又是一个子list):
3 [[10, 9, 8], [7, 6, 5], [42, 33, 2]]
4 aa[0]
5 #返回为:
6 [10, 9, 8]

min(axis) 
得到所有元素中的最小值。当给定axis值(min(0)或min(axis=0))时,在该坐标上求最小值(得到数组) 
例如:

 1 aaa = array([[10,9,8],[7,6,5],[42,33,2]])
 2 aaa.min()
 3 返回为:aaa矩阵中所有元素的最小值
 4 结果为:2
 5 aaa.min(0)
 6 返回为:aaa矩阵中所有列中元素的最小值
 7 结果为:array([7, 6, 2])
 8 aaa.min(1)
 9 返回为:aaa矩阵中所有行中元素的最小值
10 结果为:array([8, 5, 2])

max(axis) 
得到所有元素中的最小值。缺省参数axis作用和min()相同 
sum() 
得到数组元素之和,得到的是一个数字。

也可以aaa.sum(axis),分别求每一行或者是每一列的元素之和

cumsum() 
得到累计和,即依次加一个元素求和的一维数组。 
例如:

1 aaa.cumsum()
2 结果为:array([ 10,  19,  27,  34,  40,  45,  87, 120, 122])

prod() 
得到数组所有元素之积,是个数字。也可以aaa.sum(axis),分别求每一行或者是每一列的元素之积

cumprod() 
得到累计积,例子形式与上面cumsum()相同,这两个函数也都可以分坐标累计加和累计乘。 
mean() 
得到元素的平均数 
all() 
如果所有元素为真,返回真;否则返回假 
any() 
如果所有元素只要有一个真,返回真;否则返回假。 
特征值 
linalg.eigvals() 
返回A的特征值 
linalg.eig(A) 
返回A的特征值和特征向量,例如(eval, evec) = linalg.eig(A),其中eval的对角元为A的各个特征值,evec对应各列是相应特征向量。

 1 >>> a = array([[-1,1,0],
 2                [-4,3,0],
 3                [ 1,0,2]])
 4 >>> eval, evec = linalg.eig(a)
 5 >>> eval
 6 array([ 2.,  1.,  1.])
 7 >>> evec
 8 array([[ 0.        ,  0.40824829,  0.40824829],
 9        [ 0.        ,  0.81649658,  0.81649658],
10        [ 1.        , -0.40824829, -0.40824829]])

即特征向量为λ1=2的(0,0,1)和λ2=λ3=1的(0.4,0.8,-0.4)

时间: 2024-10-15 11:39:50

python 科学计算库NumPy—矩阵运算的相关文章

Python科学计算库-Numpy

科学计算库Numpy 处理数据 Year,WHO region,Country,Beverage Types,Display Value 1986,Western Pacific,Viet Nam,Wine,0 1986,Americas,Uruguay,Other,0.5 1985,Africa,Cte d'Ivoire,Wine,1.62 1986,Americas,Colombia,Beer,4.27 1987,Americas,Saint Kitts and Nevis,Beer,1.9

python 科学计算库NumPy—tile函数

在学习knn分类算法的过程中用到了tile函数,有诸多的不理解,记录下来此函数的用法.   函数原型:numpy.tile(A,reps) #简单理解是此函数将A进行重复输出 其中A和reps都是array_like的参数,A可以是:array,list,tuple,dict,matrix以及基本数据类型int,string,float以及bool类型,reps的类型可以是tuple,list,dict,array,int,bool,但不可以是float,string,matrix类型. 计较常

科学计算库Numpy基础操作

pycharm,python3.7,numpy版本1.15.1 2018年9月11日04:23:06 """ 科学计算库Numpy基础操作 时间:2018\9\11 0011 """ import numpy print("""\n------以矩阵的方式读取数据------\n ------------genfromtxt函数('文件路径',delimiter = '分隔符',dtype = 读取方式)------

安装python科学计算库 [windows下]

由于今天数据挖掘练习的缘故,需要安装一些常用的科学计算库,如耳熟能详的numpy,scipy,sklearn,matplotlib,seaborn等. 本机python 32位版本3.6,使用pip3安装相关库,看到知乎上要说换用anaconda(附带python和一些扩展库),再用conda工具安装没有的库,可以很好的解决依赖问题.由于我对Python的依赖关系的管理没有深入了解,只依赖于pip或者easy_install的使用,所以当遇到pip安装某个库失败时,就有些无措了. 解决方法如下:

linux中安装python科学计算环境-numpy、scipy、matplotlib、OpenCV...

http://blog.csdn.net/pipisorry/article/details/39902327 在Ubuntu中安装numpy.scipy.matplotlib.OpenCV等 和Python(x,y)不一样,在Ubuntu中需要手工安装科学计算的各个模块, 如何安装IPython, NumPy, SciPy, matplotlib, PyQt4, Spyder, Cython, SWIG, ETS, OpenCV: 在Ubuntu下安装Python模块通常可以使用apt-get

python科学计算之numpy

1.np.logspace(start,stop,num): 函数表示的意思是;在(start,stop)间生成等比数列num个 eg: import numpy as np print np.logspace(1,4,4) 结果为: [    10.    100.   1000.  10000.] 2. np.fromstring('admin',dtype=np.int8):函数的作用是将字符串装换成对应的ascii值 import numpy as np print np.fromstr

Linux下Python科学计算包numpy和SciPy的安装

系统环境: OS:RedHat5 Python版本:Python2.7.3 gcc版本:4.1.2 各个安装包版本: scipy-0.11.0 numpy-1.6.2 nose-1.2.1 lapack-3.4.2 atlas-3.10.0 依赖关系:scipy的安装需要依赖于numpy.lapack.atlas(后两者都是线性代数工具包),而numpy和sci的测试程序的运行又依赖于nose,因此,整个安装过程必须要按顺序执行的,否则是无法执行下去的. 安装步骤: 1.安装nose 这个安装比

02. 导数与梯度、矩阵运算性质、科学计算库numpy

一.数学基础 二.numpy 一.数学基础 关键字:求导.偏导.梯度.复合函数求导链式法则 矩阵的转置.矩阵加减.矩阵乘法[矩阵乘法不满足交换律] 二.numpy #coding:utf-8 import numpy as np print np.__version__ # 1- create narray array = np.array([1,2,3],dtype=np.uint8) print "array:",array # 2- zeros mat1 = np.zeros((

Python科学计算库演示

号码值计算基础 NumPy至Python提供了高速的多维数组处理的能力.而SciPy则在NumPy基础上加入了众多的科学计算所需的各种工具包,有了这两个库,Python就有差点儿和Matlab一样的处理数据和计算的能力了. NumPy和SciPy官方网址: http://www.scipy.org NumPy为Python带来了真正的多维数组功能.而且提供了丰富的函数库处理这些数组. 它将经常使用的数学函数都进行数组化,使得这些数学函数可以直接对数组进行操作,将本来须要在Python级别进行的循