python 列表、字典、numpy小知识点摘录
列表和字典操作区别:
列表条件循环推导式:[输出值 for 条件] :
[x*x for x in range(10) if x%3==0]
numpy的arange和linspace
import numpy as np
arange(i,j,k) 第三个参数的k为步长
如:b = np.arange(2, 45, 3).reshape(5, 3)
如果指定一维数组的长度,则使用linspace,
如:b=linspace(0,2,9),即在0到2之间均分后生成9个元素值。
二维数组sum、max、min:
a.sum()
a.max()
a.min()
合计数最大的行:a.max(axis=1)
合计数最大的列:a.max(axis=0)
矩阵:
引入模块:
import numpy as np
矩阵对象和数组的主要有两点差别:一是矩阵是二维的,而数组的
可以是任意正整数维;二是矩阵的 * 操作符进行的是矩阵乘法,乘号左侧的矩阵
列和乘号右侧的矩阵行要相等,而在数组中 * 操作符进行的是每一元素的对应相
乘,乘号两侧的数组每一维大小需要一致。数组可以通过 asmatrix 或者 mat 转
换为矩阵,或者直接生成也可以。
举例:
1,
a = np.arange(20).reshape(4, 5)
a = np.asmatrix(a)
或 a=mat(a)
2,
a = np.matrix('1.0 2.0; 3.0 4.0') ---->注意格式,中间为' ; '号(分号)
数组元素的访问:
可以通过下标访问来修改数组元素的值,
如:
a = np.array([[3.2, 1.5], [2.5, 4]])
a[0][1] 或 a[0, 1]
数组的链接:b=a
b与a指向同一地址,修改任意一个数组,另一个数组也随之变动。
数组的复制:b=a.copy(),重新开辟一个地址给b,ab分别指向不同地址。
访问某一维的数组:
a[:,[1,3]] ---->第2列和第4列
a[:, 2][a[:, 0] > 5] ---->将第一列大于5的元素所对应的第三列元素取出来
np.where(a==11) ---->查找元素为11的位置
数组的转置:np.transpose(a)
矩阵的转置:b.T
矩阵求逆:
import numpy.linalg as nlg
a = np.random.rand(2,2)
a = np.mat(a)
ia = nlg.inv(a)
a:
[[ 0.86211266 0.6885563 ]
[ 0.28798536 0.70810425]]
inverse of a:
[[ 1.71798445 -1.6705577 ]
[-0.69870271 2.09163573]]
a * inv(a)
[[ 1. 0.]
[ 0. 1.]]
求特征值和特征向量
a = np.random.rand(3,3)
eig_value, eig_vector = nlg.eig(a)
print "eigen value:"
print eig_value
print "eigen vector:"
print eig_vector
eigen value:
[ 1.35760609 0.43205379 -0.53470662]
eigen vector:
[[-0.76595379 -0.88231952 -0.07390831]
[-0.55170557 0.21659887 -0.74213622]
[-0.33005418 0.41784829 0.66616169]]