【无聊】编程基础之 Python 基础

本文介绍了Python的基础语法,包括变量命名、缩进、元组、字典和函数。详细讲解了类的设计,展示了如何创建和使用类。此外,还深入探讨了NumPy库,包括ndarray对象、数组存取、形状变换等基础知识,是学习Python和数据科学的良好起点。
摘要由CSDN通过智能技术生成

1基础语法与数据结构的熟悉
 

1.1 基础语法

1.关于变量命名
2.关于缩进
3.关于符号":"
在 python 语法中,符号":"被用于类,函数定义,循环体, if, else 语句等,容易被忽略造成语法错误。
4.关于中英文字符
python 语法因为特殊字符造成的问题特别多,以后肯定会遇到。一般我们写注释会写一些中文帮助理解,所以记得每一个脚本的第一行写上。

#coding:utf8

5.import

import 既可以引入标准库,也可以引入其他脚本,多级目录的引用此后一定要熟悉。

import sys ##引入标准库
from test.py import sum #从 test.py 脚本中引入 sum 函数
 

1.2 数组与元组(list 和 tuple),字典

    2.元组tuple

元组与数组类似,不同之处在于元组的元素不能修改; 元组使用小括号, 数组使用方
括号。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

3.字典dict

1.3 函数
 

位置参数、默认参数、可变参数、关键字参数和命名关键字参数,随着越来越熟练,系统越来越复杂,就会用的越来越多

结果:

1.4 类

当代码工程比较复杂时,类的设计是不可避免的,比如要在实际的工程环境中进行部署,和其他的项目进行通信等。
类的设计以 class 关键词为代表,后面接类名,继承的子类。

一般定义一个类一定会包含 init 函数,用于完成初始化。然后就是对外的功能函数,下面是一个最精简的例子
#coding:utf8
class YousanAI(object):
        def __init__(self, projectname, tuition):
              self.projectname = projectname
              self.tuition= tuition
              self.studiers = [] ##定义一个数组


       def addstudiers(self,name):
             self.studiers.append(name)

      def removestudiers(self,name):
             self.studiers.remove(name)


yousanAI = YousanAI("季划",1500)
yousanAI.addstudiers("王司")
print type(yousanAI)
 

练习:把文件下的的图片的命名和标签都保存在txt

关键在于使用:os.walk()

os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。

os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。

 

#conding:utf8
import os
import sys

def study(a,b,c=0,*args,**kw):
    print('a=',a,'b=',b,'c=',c,'args=',args,'kw=',kw)
    study(1,2,3,'learningAI',age=24,gender=boy)

def listfiles(rootDir,txtfile,label=0):
    ftxfile = open(txtfile,'w')
    list_dirs = os.walk(rootDir)
    print("list_dirs:", list_dirs)
    #print(list_dirs[1])
    #print(list_dirs[2])
    #print(list_dirs[3])
    count = 0
    dircount = 0
    index= 0
    for root, dirs, files in list_dirs:
        print("index:",index)
        index+=1
        print(root,dirs,files)
        print("--00--")
        for d in dirs:
            print(os.path.join(root,d))
            dircount = dircount + 1
            print("+++11++")
        for f in files:
            print(os.path.join(root,f))
            print("+++22++")
            ftxfile.write(os.path.join(root,f)+' '+str(label)+'\n')
            count = count + 1
        print(",,,,,")
        print(rootDir+"has "+str(dircount)+" dirstory")
        print(rootDir+"has "+str(count)+" files")
#if __name__ == '__mian__':

listfiles(sys.argv[1],sys.argv[2],sys.argv[3])

结果:

执行:python python.py 0作业2和作业3/ python.txt 0

 

练习:把上述的文件下的图片分成train.txt 和 test.txt

import os
import sys
import shutil
import cv2
import random
class GeneDataset():
    def __init__(self,rootdir):
        self.rootdir = rootdir
        self.subdirs = []
        self.subdirimages = []
        self.numclasses = 0
        self.lines = []
    
    def looksudir(self):
        list_dirs = os.walk(self.rootdir)
        for root ,dirs, files in list_dirs:
            for d in dirs:
                self.subdirs.append(os.path.join(root,d))
                print("subdir=",os.path.join(root,d))
                self.numclasses = self.numclasses + 1
            
    
    def reformat(self):
        label = 0
        for subdir in self.subdirs:
            list_dirs = os.walk(subdir)
            for root,dirs,files in list_dirs:
                for f in files:
                    srcname = os.path.join(root,f)
                    print("srcname",srcname)
                    srcformat = srcname.split('.')[-1]
                    if srcformat is not ".jpg":
                       #img = cv2.imread(srcname)
                       #newname = srcname.replace(srcformat,'jpg')
                       #print("newname=",newname)
                       #cv2.imwrite(newname,img)
                       newname =  str(srcname.split('.')[0])+'.jpg'
                       os.rename(srcname,newname)
                       self.lines.append(newname+' '+str(label)+'\n')
                       #os.remove(srcname)
            label = label + 1
            
    def split_train_val(self,trainfile,testfile):
        if len(self.lines):
            random.shuffle(self.lines)
            ftrainfile = open(trainfile,'w')
            ftestfile = open(testfile,'w')
            trainlength = int(0.7*len(self.lines))
            for i in range(0,trainlength):
                ftrainfile.write(self.lines[i])
                
            for i in range(trainlength,len(self.lines)):
                ftestfile.write(self.lines[i])
                
#实例化
myclassdataset = GeneDataset(sys.argv[1])
#查看sudir
myclassdataset.looksudir()
#统一格式成.jpg,把不是jpg的图片后缀变成jpg
myclassdataset.reformat()
#划分
myclassdataset.split_train_val('train.txt','test.txt')

结果:

2 矩阵数据库 NumPy
 2.1 基础知识

NumPy(Numerical Python)是 Python 最重要的矩阵库,支持高维数组与矩阵运算,提供了大量的数学函数库。对于深度学习来说,高维数组我们用的很多,因此要想学好深度学习,必须对 NumPy 了如指掌。


1.ndarray 对象与创建
ndarray 是 numpy 库的基础数据格式, 要想对数组进行运算操作,我们必须先创建个数组。
#创建指定数组

import numpy as np#导入 numpy 这个包
a0 = np.array([1,2,3,4])#采用数组方式
a1 = np.array((1,2,3,4))#采用元组方式
a3 = np.array([[1,2,3],[2,3,4],[4,5,6]])#创建多维数组

#自动生成数组

a = np.arange(0,1,0.1)
a = np.linspace(0,10,10)
np.zeros() :生成元素全是 0 的数组
np.ones():生成元素全是 1 的数组
np.zeros_like(a):生成形状和 a 一样且元素全是 0 的数组
np.ones_like(a):生成形状和 a 一样且元素全是 1 的数组
np.zeros((100,100),np.uint8):生成一个 100*100 的 uint8 类型的图像

获取数组 a 的 shape:

a.shape
获取数组 a 的元素类型:

a.dtype
获取数组 a 的维度:

a.ndim

2.存取数组

竖轴表示第 0 轴(行),横轴表示第 1 轴(列),读取元素时我们通过逗号把 0 轴和 1 轴隔开


3.数组变换

对数组的形状变换是非常高频的操作。
a = np.arange(0,10,1)
b = a.reshape(2,5)

通过 reshape()函数把一个 1 维数组,变成了一个 2 行 5 列的一个数组,reshape()里面的参数就是你想要转换成的数组的形状。

b和c是一样的结果。

维度交换

通过上面实例我们看出通过 swapaxes()将一个数组的第 0 轴和第 1 轴进行了交换,由2 行 5 列变成了 5 列 2 行, 三维数组例子类似。


 这个实例将三维数组的第 0 轴和第 1 轴进行了交换,三维数组的维度变换在 caffe,tensorflow, pytorch 等各类开源框架中使用都是非常的频繁的。

一个图像读取进来是(height,weight,channel)这样的格式存储,而深度学习框架中 ,通常都是(batch,channel,height,width)的存储格式,经常需要转换。

 

可以看出我们通过 reshape(-1)、 flatten()和 ravel()函数将多维变成了 1 维数组

有的时候,我们需要将多余的维度去掉,比如一个数据格式是(100,100,1),第三维通道为 1,那么可以将其变换为(100,100),用到 squeeze 脚本。如果反之,则是 expand_dims,而且可以拓展到不同的维度,这两个操作在深度学习框架中,非常频繁使用。

a = np.zeros((100,100,1)) ##尺度为(100,100,1
b = np.squeeze(a) ##尺度为(100,100)
c = np.expand_dims(b,0) ##尺度为(1,100,100)
d = np.expand_dims(b,1) ##尺度为(100,1,100)
e = np.expand_dims(b,2) ##尺度为(100,100,1)
 

数组的堆叠,数组的堆叠通常有水平叠加和垂直叠加,分别用到
hstack() 【水平堆叠】和 vstack()【垂直堆叠】函数,请看下面的实例:


a = np.array([1,2,3,4]) #尺度为(4,),一维向量
b = np.array([5,6,7,8]) #尺度为(4,) ,一维向量
c = np.hstack((a,b)) #尺度为(8,) ,一维向量
d = np.vstack((a,b)) #尺度为(2,4),二维矩阵


 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值