深度学习入门-第1章-Python入门

本文记录了春节期间作者在学习人工智能,特别是Python编程、NumPy数值计算和Matplotlib数据可视化方面的经历,包括Python的基础安装、数据类型、算术运算、列表、字典、布尔型、控制结构(if和for)、函数、脚本文件、类和对象,以及NumPy和Matplotlib的简单应用。
摘要由CSDN通过智能技术生成

春节想学习一些人工智能方面的知识,跟上时代,云风去年推荐了入门的鱼书:深度学习入门:基于Python的理论与实现 

图灵社区图灵社区成立于2005年6月,以策划出版高质量的科技书籍为核心业务,主要出版领域包括计算机、电子电气、数学统计、科普等,通过引进国际高水平的教材、专著,以及发掘国内优秀原创作品等途径,为目标读者提供一流的内容。icon-default.png?t=N7T8https://www.ituring.com.cn/book/1921这本书读起来没有门槛,初五不串门,在家安心读了第一章:Python入门,记录如下

安装python:

第一章 python入门
https://www.7-zip.org/download.html
https://www.ituring.com.cn/book/1921

install python3:Anaconda发行版
https://www.anaconda.com/download
powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))


C:\python\ml> python --version
Python 3.11.5
(base) PS C:\python\ml> python
Python 3.11.5 | packaged by Anaconda, Inc. | (main, Sep 11 2023, 13:26:23) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

2024.04.28 这个anaconda竟然有版权问题,看介绍是免费下载的。所以我把windows的卸载了。

在linux下重新安装了一套,似乎没有说有这类问题:

machinelearning]$ python --version
Python 3.11.5

machinelearning]$ python
Python 3.11.5 (main, Sep 11 2023, 13:54:46) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

并未显示Anaconda信息

确认安装了anaconda版本。下面就开始做书上的实验了

不安装anaconda,也可以直接用python.

win11:microsoft store里面可以直接安装python

ch01> python --version
Python 3.12.4

安装numpy

C:\python> pip install numpy

Successfully installed numpy-1.26.4

python -m pip install -U pip
python -m pip install -U matplotlib

对话模式:

1.3.1 算术运算


(base) [machinelearning]$ python
Python 3.11.5 (main, Sep 11 2023, 13:54:46) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+2
3
>>> 1-2
-1
>>> 4*5
20
>>> 7/5
1.4
>>> 3**2
9
>>> 

** 表示乘方(3**2 是 3 的 2 次方)
在 Python 2.x 中,整数除以整数的结果是整数,比如,7 ÷ 5 的结果是 1。但在 Python 3.x 中,整数除以整数的结果是小数(浮点数)

1.3.2 数据类型

>>> type(10)
<class 'int'>
>>> type(2.716)
<class 'float'>
>>> type("hello")
<class 'str'>
>>> 

1.3.3 变量

>>> x=10
>>> print(x)
10                                                                                                                                                                                            
>>> x=100                                                                                                                                                                                     
>>> print(x)                                                                                                                                                                                  
100                                                                                                                                                                                           
>>> y=3.14
>>> x*y                                                                                                                                                                                       
314.0                                                                                                                                                                                         
>>> type(x*y)                                                                                                                                                                                 
<class 'float'>                                                                                                                                                                               
>>>            


Python 是属于“动态类型语言”的编程语言,所谓动态,是指变量的类型是根据情况自动决定的

1.3.4 列表

>>> a=[1,2,3,4,5]
>>> print(a)
[1, 2, 3, 4, 5]
>>> len(a)
5
>>> a[1]
2
>>> a[0]
1
>>> a[4]
5
>>> a[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> a[4]=99
>>> print(a)
[1, 2, 3, 4, 99]

使用切片不仅可以访问某个值,还可以访问列表的子列表
 

>>> print(a)
[1, 2, 3, 4, 99]
>>> a[0:2]
[1, 2]
>>> a[1:]
[2, 3, 4, 99]
>>> a[:3]
[1, 2, 3]
>>> a[:-1]
[1, 2, 3, 4]
>>> a[:-2]
[1, 2, 3]

1.3.5 字典
 

>>> me={'height':180}
>>> me['height']
180
>>> me['weight']=70
>>> print(me)
{'height': 180, 'weight': 70}

1.3.6 布尔型
 

>>> hungry=True
>>> sleepy=False
>>> type(hungry)
<class 'bool'>
>>> not hungry
False
>>> hungry and sleepy
False
>>> hungry or sleepy
True

1.3.7 if 语句
 

>>> hungry=True
>>> if hungry:
... print("I'm hungry")
  File "<stdin>", line 2
    print("I'm hungry")
    ^
IndentationError: expected an indented block after 'if' statement on line 1
>>>   print("I'm hungry")
  File "<stdin>", line 1
    print("I'm hungry")
IndentationError: unexpected indent
>>> if hungry:
...  print("i'm hungry")
... 
i'm hungry
>>> hungry=False
>>> if hungry:
...  print("hungry")
... else:
...  print("im not hungry")
...  print("im sleepy")
... 
im not hungry
im sleepy

上面的 if 语句中,if hungry: 下面的语句开头有 4 个空白字符。它是缩进的意思,表示当前面的条件(if hungry )成立时,此处的代码会被执行。这个缩进也可以用 tab 表示,Python 中推荐使用空白字符。
Python 使用空白字符表示缩进。一般而言,每缩进一次,使用 4 个空白字符。

1.3.8 for 语句
 

>>> for i in [1,2,3]:
...  print(i)
... 
1
2
3

1.3.9 函数

>>> def hello():
...  print("Hello World!")
... 
>>> hello()
Hello World!
>>> 
>>> 
>>> 
>>> def hello(object)
  File "<stdin>", line 1
    def hello(object)
                     ^
SyntaxError: expected ':'
>>> def hello(object):
...  print("Hello"+object+"!")
... 
>>> hello("cat")
Hellocat!
>>> 
(base) [machinelearning]$ 

关闭 Python 解释器时,Linux 或 Mac OS X 的情况下输入Ctrl-D(按住 Ctrl,再按 D 键);Windows 的情况下输入Ctrl-Z,然后按 Enter 键。

1.4 Python脚本文件
1.4.1 保存为文件
(base) PS C:\python\ml\ch01> python hungry.py
I'm hungry!

linux环境

(base) [machinelearning]$ pwd
/media/vdc/book/booknotes/machinelearning
(base) [machinelearning]$ ls
(base) [machinelearning]$ mkdir ch01
(base) [machinelearning]$ cd ch01
(base) [ch01]$ touch hungry.py
(base) [ch01]$ vi hungry.py
(base) [ch01]$ python hungry.py
I'm hungry!
(base) [ch01]$ 


1.4.2 类
(base) PS C:\python\ml\ch01> python man.py
Initialized!
Hello David!
Good-bye David!

python中使用class关键字来定义类,累遵循如下格式:
class 类名:
    def __init__(self,参数):#构造函数
        ...
    def 方法1(self,参数):
        ...
这里有一个特殊的 init 方法,这是进行初始化的方法,也称为构造函数 (constructor)
在方法的第一个参数中明确地写入表示自身(自身的实例)的 self 是 Python 的一个特点
linux下的例子:

 ch01]$ touch man.py
(base)  ch01]$ vi man.py
(base) ch01]$ python man.py
Traceback (most recent call last):
  File "/media/vdc/book/booknotes/machinelearning/ch01/man.py", line 1, in <module>
    class Man:
  File "/media/vdc/book/booknotes/machinelearning/ch01/man.py", line 9, in Man
    m = Man("David")
        ^^^
NameError: name 'Man' is not defined. Did you mean: 'max'?
(base) [ch01]$ cat man.py
 

class Man:
    def __init__(self, name):
        self.name=name
        print("Initialized!")
    def hello(self):
        print("Hello "+self.name+"!")
    def goodbye(self):
        print("Good-bye "+self.name+"!")
m = Man("David")
m.hello()
m.goodbye()

从程序看,是调用Man不需要空格,否则就是在class Man定义中了,所以找不到Man,去掉空格:
(base) [ch01]$ vi man.py
(base) [ch01]$ python man.py
Initialized!
Hello David!
Good-bye David!
 

1.5 NumPy
1.5.1 导入 NumPy
1.5.2 生成 NumPy 数组

>>> import numpy as np
>>> x=np.array([1.0,2.0,3.0])
>>> print(x)
[1. 2. 3.]
>>> type(x)
<class 'numpy.ndarray'>


1.5.3 NumPy 的算术运算

>>> x=np.array([1.0,2.0,3.0])
>>> y=np.array([2.0,4.0,6.0])
>>> x+y
array([3., 6., 9.])
>>> x-y
array([-1., -2., -3.])
>>> x*y
array([ 2.,  8., 18.])
>>> x/y
array([0.5, 0.5, 0.5])
>>> x/2.0
array([0.5, 1. , 1.5])


NumPy 数组不仅可以进行 element-wise 运算,也可以和单一的数值(标量)组合起来进行运算。此时,需要在 NumPy 数组的各个元素和标量之间进行运算。这个功能也被称为广播

1.5.4 NumPy 的 N 维数组

>>> A=np.array([[1,2],[3,4]])
>>> print(A)
[[1 2]
 [3 4]]
>>> A.shape
(2, 2)
>>> A.dtype
dtype('int64')
>>> B=np.array([[3,0],[0,6]])
>>> A+B
array([[ 4,  2],
       [ 3, 10]])
>>> A*B
array([[ 3,  0],
       [ 0, 24]])


NumPy 数组(np.array )可以生成 N 维数组,即可以生成一维数组、二维数组、三维数组等任意维数的数组。数学上将一维数组称为向量 ,将二维数组称为矩阵 。另外,可以将一般化之后的向量或矩阵等统称为张量 (tensor)

1.5.5 广播
 

>>> print(A)
[[1 2]
 [3 4]]
>>> A*10
array([[10, 20],
       [30, 40]])
>>> print(A)
[[1 2]
 [3 4]]
>>> B=np.array([10,20])
>>> A*B
array([[10, 40],
       [30, 80]])

在这个运算中,如图 1-2 所示,一维数组 B 被“巧妙地”变成了和二位数组 A 相同的形状,然后再以对应元素的方式进行运算。

1.5.6 访问元素

>>> X=np.array([[51,55],[14,19],[0,4]])
>>> print(X)
[[51 55]
 [14 19]
 [ 0  4]]
>>> X[0]
array([51, 55])
>>> X[0][1]
55
>>> for row in X:
...  print(row)
... 
[51 55]
[14 19]
[0 4]
>>> X=X.flatten()
>>> print(X)
[51 55 14 19  0  4]
>>> X[np.array([0,2,4])]
array([51, 14,  0])
>>> X>15
array([ True,  True, False,  True, False, False])
>>> X[X>15]
array([51, 55, 19])


对 NumPy 数组使用不等号运算符等(上例中是 X > 15 ),结果会得到一个布尔型的数组。上例中就是使用这个布尔型数组取出了数组的各个元素(取出 True 对应的元素)

1.6 Matplotlib
1.6.1 绘制简单图形

import numpy as np
import matplotlib.pyplot as plt

x=np.arange(0,6,0.1)
y=np.sin(x)

plt.plot(x,y)
plt.show()


1.6.2 pyplot 的功能

import numpy as np
import matplotlib.pyplot as plt

x=np.arange(0,6,0.1)
y1=np.sin(x)
y2=np.cos(x)

plt.plot(x,y1,label="sin")
plt.plot(x,y2,linestyle="--",label="cos")
plt.xlabel("x")
plt.ylabel("y")
plt.title('sin&cos')
plt.legend()
plt.show()


1.6.3 显示图像

import matplotlib.pyplot as plt
from matplotlib.image import imread

img = imread('OXA.png')
plt.imshow(img)
plt.show()

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值