numpy快速入门

列表推导式(非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:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\matrixlib\defmatrix.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/

posted @ 2019-10-11 12:02  晨光曦微  阅读(301)  评论(0编辑  收藏  举报