列表推导式(非numpy部分)
1.首先看看常规写法,这非常麻烦
#常规写法 >>> myList=[] >>> for item in a: ... myList.append(item*4) ... >>> myList [4, 8, 8, 8, 16, 20, 20]
2.列表推导式写法,上式等于
#列表推导式是这样子滴: >>> a=[1, 2, 2, 2, 4, 5, 5] >>> myList = [item*4 for item in a] >>> myList [4, 8, 8, 8, 16, 20, 20]
3.列表推导更高级写法,只保留大于2的写法
>>> a=[1, 2, 2, 2, 4, 5, 5] #只取原列表大于2的,来计算,其它不要 >>> [item*4 for item in a if item>2] [16, 20, 20]
NumPy数组
NumPy两种【基本数据类型】:【数组】 和 【矩阵】
1.矩阵相加示例
#例1,矩阵加法 >>> from numpy import array >>> mm=array((1,1,1,)) >>> pp=array((1,2,3)) >>> mm+pp array([2, 3, 4])
2.矩阵乘法示例
#矩阵乘法,接例1 from numpy import array >>> pp*2 array([2, 4, 6])
3.矩阵平方
#平方示例,接例1 >>> pp**2 array([1, 4, 9], dtype=int32)
4.矩阵除法
#除法 >>> pp/2 array([0.5, 1. , 1.5])
5.像列表中一样访问数组里的元素:
#访问 >>> pp[1] 2
6.其它:多维数组及访问,两个数组相乘、
#NumPy中也支持多维数组: >>> jj = array([[1, 2, 3], [1, 1, 1]]) #多维数组中的元素也可以像列表中一样访问: >>> jj[0] array([1, 2, 3]) >>> jj[0][1] 2 #也可以用矩阵方式访问: >>> jj[0,1] 2 #========================= #当把两个数组乘起来的时候,两个数组的元素将对应相乘: >>> a1=array([1, 2,3]) >>> a2=array([0.3, 0.2, 0.3]) >>> a1*a2 array([ 0.3, 0.4, 0.9])
NumPy矩阵
矩阵开始:1.导入模块、2.创建矩阵、3.访问矩阵元素、4.列表转矩阵
#1.与使用数组一样,需要从NumPy中导入matrix或者mat模块: >>> from numpy import mat, matrix #2.创建矩阵(上述NumPy中的关键字mat是matrix的缩写,它们是同一种东西 >>> ss = mat([1, 2, 3]) >>> ss matrix([[1, 2, 3]]) >>> mm = matrix([1, 2, 3]) >>> mm matrix([[1, 2, 3]]) #3.可以访问矩阵中的单个元素: >>> mm[0, 1] 2 #4.可以把Python列表转换成NumPy矩阵: >>> pyList = [5, 11, 1605] >>> mat(pyList) matrix([[ 5, 11, 1605]])
♦♦重点:矩阵相乘♦♦
【运算原则:左矩阵的列数和右矩阵的行数必须相等】(1x3要和3x1才能相乘)
矩阵数据类型的运算会强制执行数学中的矩阵运算,1×3的矩阵是不能与1×3的矩阵相乘的,所以以下会报错
#以下是错误示例 >>> ss*mm 报错: Traceback (most recent call last): File "<pyshell#37>", line 1, in <module> ss*mm File "C:UsersAdministratorAppDataLocalProgramsPythonPython37libsite-packages umpymatrixlibdefmatrix.py", line 215, in __mul__ return N.dot(self, asmatrix(other)) ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)
矩阵相乘办法1:(先转置,再相乘)
#原ss >>> ss matrix([[1, 2, 3]]) #转置后的ss .T即是转置的方法 >>> ss.T matrix([[1], [2], [3]]) #mm是这样的 >>> mm matrix([[4, 5, 6]]) #★★然后它们就能相乘了(mm的行数=ss.T的列数) >>> mm*ss.T matrix([[32]])
shape查看矩阵 或 数组 维数:
知道矩阵的大小有助于上述对齐错误的调试,可以通过NumPy中的shape方法来查看矩阵或者数组的维数:
#输出结果(1,3)表示mm是一个1行3列的列表 >>> shape(mm) (1, 3)
矩阵相乘2,一一对应相乘multiply():
【矩阵mm的每个元素】和【矩阵ss的每个元素】对应相乘。 即:元素相乘法
#一一对应相乘办法multiply(乘) >>> from numpy import multiply >>> multiply(mm,ss) matrix([[ 4, 10, 18]])
矩阵和数组排序 sort():
注意该方法是原地排序(即排序后的结果占用原始的存储空间),所以如果希望保留数据的原序,必须事先做一份拷贝
#默认从小到大升序排列 >>> mm.sort() >>> mm matrix([[1, 2, 3]])
排序2 argsort():
使用argsort()方法得到矩阵中每个元素的排序序号
#得到对应元素的排序序号 >>> dd=mat([4, 5, 1]) >>> dd.argsort() matrix([[2, 0, 1]])
矩阵的均值,.mean():
#均值 >>> dd=mat([4, 5, 1]) >>> dd.mean() 3.3333333333333335
多维数组取整行:(行号,:)
#多维数组: >>> jj = mat([[1, 2, 3,], [8, 8, 8]]) >>> shape(jj) (2, 3) #这是一个2×3的矩阵,要取出第1行元素,第0行元素,应该分别输入: >>> jj[1,:] matrix([[8, 8, 8]])
>>> jj[0,:]
matrix([[1, 2, 3]])
取第1行第0列--第1列的元素(行号,列号:列号)
#第1行,行0列—第2列 >>> jj = mat([[1, 2, 3,], [4, 5, 6]]) >>> shape(jj) (2, 3) >>> jj[1,0:2] matrix([[4, 5]]) # >>> jj = mat([[1, 2, 3,], [4, 5, 6]]) >>> shape(jj) (2, 3) >>> jj[0,1:2] matrix([[2]]) >>> jj[1,1:] matrix([[5, 6]]) >>> jj[1,2:] matrix([[6]])
tile()把一个列表转成指定 行,列:
#tile((列表或元组),(行,列)) #把元组(0,1)转成2行1列的数组 >>> tile((0,1),(2,1)) array([[0, 1], [0, 1]]) #把列表[1,2]转成2行1列的数组 >>> tile([1,2],(2,1)) array([[1, 2], [1, 2]])
更多numpy:http://docs.scipy.org/doc/