python3学习笔记

2023-01-31 01:01:15 学习笔记 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)]

注意:

  1. 自定义key和reverse比cmp执行效率高
  2. 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值

相关文章