python3学习笔记
好久不用python,努力捡起来ing
python3语法
字符串
repr()把其他类型变量转换为字符串
ord()把单个字符转换为相应的ascii码
int()把其他进制的“字符串”转换为十进制
int(str,n),其中str是字符串,n是进制,Eg:
>>> int('1101',2)
13
from numpy import *和import numpy的区别
前者是引入numpy包中的所有类,后续代码中可以直接使用类的方法。后者是引入numpy包,如果需要使用同名类的方法,需要加类名。
Eg:
from numpy import * | import numpy |
---|---|
mat(random.rand(4,4)) | numpy.mat(numpy.random.rand(4,4)) |
列表、元组、字典
列表
list1=[‘A’,‘A’,‘B’,‘B’],访问时用索引,list1[2]=‘B’
多维数组赋值
下面的方法,如果是一维数组,没有太大问题,改变其中一位不会影响其他位:
>>> t=[0]*5
>>> t
[0, 0, 0, 0, 0]
>>> t[2]=1
>>> t
[0, 0, 1, 0, 0]
但如果是二维数组,如t=[[0]*3]*4
,则后面的*4其实是复制了一个数组对象,这样的话,每行的数组对象都是一个对象,所以改变其中一行的某列,会同时改变所有行的该列。
>>> t=[[0]*3]*4
>>> t
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> t[0][0]=1
>>> t
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
所以为多维数组赋值,最好写成这样:
>>> sig = [[0 for col in range(cols)] for row in range(rows)]
列表的复制
类似列表赋值,对于一维列表,可以使用b=a[:]来复制,这样改变b不会改变a,改变a也不会改变b。但是对于二维列表,需要用copy库的deepcopy了。
元组
与列表基本相似,区别在于元组无法修改其中的元素(删除/替换etc)
字典
字典中保存的是键值对
Eg:
>>> classCount={'A':2,'B':1}
>>> classCount
{'A': 2, 'B': 1}
lambda创建匿名函数
类似于def,但是更简单
Eg:
>>> sum = lambda arg1, arg2: arg1 + arg2
>>> sum(10,20)
30
sorted函数
Python3内置的排序函数,可对所有可迭代对象排序
sorted(item,cmp,key,reverse)
该函数主要有4个参数,依次是:可迭代对象item、比较函数cmp、比较的元素key、是否逆序(默认升序)
Eg:
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2]) # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(students, key=lambda s: s[2], reverse=True) # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> classCount={'A':1,'B':3}
>>> sortedClassCount=sorted(classCount.items(),key=lambda item:item[1],reverse=True)
>>> sortedClassCount
[('B', 3), ('A', 1)]
注意:
- 自定义key和reverse比cmp执行效率高
- sorted()返回一个列表(list)
file相关方法
open函数
最常用的2个参数,filename、mode,需要注意open后close
推荐写法:
#写
with open('test.txt', 'w', encoding='utf-8') as f:
f.write('test')
#读
with open('test.txt', 'r', encoding='utf-8') as f:
f.readlines()
readlines()
读取所有行并返回列表
numpy库的函数
ravel()函数和flatten()函数
作用:把多维array变为一维
>>> x = np.array([[1, 2], [3, 4]])
>>> x
array([[1, 2],
[3, 4]])
>>> x.flatten()
array([1, 2, 3, 4])
>>> x.ravel()
array([1, 2, 3, 4])
区别在于:ravel()函数,返回的是原先array的“引用“值,所以改变x.ravel()也会改变x,但改变x.flatten()不会改变x
shape函数
作用:返回矩阵的维度,shape[0]是行,shape[1]是列
Eg:
>>> e=array([[1,1],[1,2],[1,3]])
>>> e
array([[1, 1],
[1, 2],
[1, 3]])
>>> e.shape
(3, 2)
>>> e.shape[0]
3
tile函数
作用:把一个矩阵复制相应行、列
Eg:
>>> a=[1,2]
>>> tile(a,[2,3])
array([[1, 2, 1, 2, 1, 2],
[1, 2, 1, 2, 1, 2]])
矩阵matrix的点乘multiply(a,b)
>>> a=mat([1,2])
>>> b=mat([1,2])
>>> multiply(a,b)
matrix([[1, 4]])
矩阵array的乘方**2
>>> c=array([1,2])
>>> c**2
array([1, 4])
矩阵array求和sum()
a.sum(axis=1)是求矩阵a中每行的和,axis=0求每列的和,结果均为行向量
>>> a=array([[1,1],[1,2],[1,3]])
>>> a.sum(axis=1)
array([2, 3, 4])
>>> a.sum(axis=0)
array([3, 6])
argsort(),输出排序后数组array的索引
默认按升序排序
# 对行向量
>>> a=array([1,2,3])
>>> a.argsort()
array([0, 1, 2])
# 对列向量
>>> b
matrix([[1],
[2],
[3]])
>>> b.argsort(axis=0)
matrix([[0],
[1],
[2]])
# TODO:对二维矩阵排序暂时没搞懂
zeros()
返回0阵
>>> zeros((2,3))
array([[0., 0., 0.],
[0., 0., 0.]])
矩阵array的min()和max()
min(0)返回每列最小值,min(1)返回每行最小值
>>> a
array([[1, 1],
[2, 4],
[3, 6]])
>>> a.max(0)
array([3, 6])
ptp()
函数计算数组中元素最大值与最小值的差(最大值 - 最小值)
0求每列,1求每行
>>> a
array([[1, 1],
[2, 4],
[3, 6]])
>>> a.ptp(0)
array([2, 5])
合成矩阵hstack()和vstack()
hstack()按列合成,vstack()按行合成
>>> a
matrix([[1, 2],
[1, 3]])
>>> b
matrix([[0],
[0]])
>>> c=hstack((b,a))
>>> c
matrix([[0, 1, 2],
[0, 1, 3]])
删除矩阵的某行/某列delete()
axis=0是删除行,axis=1是删除列
>>> a
matrix([[1, 1],
[1, 2],
[1, 3]])
>>> delete(a,1,axis=0)
matrix([[1, 1],
[1, 3]])
替换nan的数字为0,替换inf为相应的数值numpy.nan_to_num(x)
>>> a
array([[ nan, inf],
[ nan, -inf]])
>>> np.nan_to_num(a)
array([[ 0.00000000e+000, 1.79769313e+308],
[ 0.00000000e+000, -1.79769313e+308]])
matplotlib库
scatter()函数
原型:
scatter(self, x, y, s=None, c=None, marker=None, cmap=None, nORM=None,
vmin=None, vmax=None, alpha=None, linewidths=None,
verts=None, edgecolors=None,
**kwargs):
常用参数: | ` |
---|---|
x,y | 散点图的横坐标和纵坐标 |
s | 点的大小 |
c | 点的颜色 |
marker | 点的标志,可选:.(点)o(圈)x(叉) |
Eg:
x有2种特征,y有多种取值,则可以通过
scatter(dataMat[:,1],dataMat[:,2],c=array(datingDataLabel))
绘制出不同颜色的点来表示y值
相关文章