深度学习入门

Posted 流浪若相惜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习入门相关的知识,希望对你有一定的参考价值。

声明:深度学习入门教程(一)、(二)仅做为本人入门学习过程中笔记,两篇博客并不是系统学习。

Python学习-常用数据存储容器

序列与元组

参考材料Python document

我们看到列表和字符串有很多共同特性,例如索引和切片操作。他们是序列数据类型(参见 序列类型 — list, tuple, range)中的两种。随着 Python 语言的发展,其他的序列类型也会被加入其中。这里介绍另一种标准序列类型: 元组。

一个元组由几个被逗号隔开的值组成,例如

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
>>> # Tuples are immutable:
... t[0] = 88888
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> # but they can contain mutable objects:
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])

如你所见,元组在输出时总是被圆括号包围的,以便正确表示嵌套元组。输入时圆括号可有可无,不过经常会是必须的(如果这个元组是一个更大的表达式的一部分)。给元组中的一个单独的元素赋值是不允许的,当然你可以创建包含可变对象的元组,例如列表。

虽然元组可能看起来与列表很像,但它们通常是在不同的场景被使用,并且有着不同的用途。元组是 immutable ,其序列通常包含不同种类的元素,并且通过解包(这一节下面会解释)或者索引来访问(如果是 namedtuples 的话甚至还可以通过属性访问)。列表是 mutable ,并且列表中的元素一般是同种类型的,并且通过迭代访问。

一个特殊的问题是构造包含0个或1个元素的元组:为了适应这种情况,语法有一些额外的改变。空元组可以直接被一对空圆括号创建,含有一个元素的元组可以通过在这个元素后添加一个逗号来构建(圆括号里只有一个值的话不够明确)。丑陋,但是有效。例如

>>>
>>> empty = ()
>>> singleton = 'hello',    # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)

语句 t = 12345, 54321, ‘hello!’ 是 元组打包 的一个例子:值 12345, 54321 和 ‘hello!’ 被打包进元组。其逆操作也是允许的

>>> x, y, z = t

这被称为 序列解包 也是很恰当的,因为解包操作的等号右侧可以是任何序列。序列解包要求等号左侧的变量数与右侧序列里所含的元素数相同。注意多重赋值其实也只是元组打包和序列解包的组合。

集合

Python也包含有集合类型。集合是由 不重复元素 组成的无序的集。它的基本用法包括成员检测和消除重复元素。集合对象也支持像联合,交集,差集,对称差分等数学运算。

花括号或 set() 函数可以用来创建集合。注意:要创建一个空集合你只能用 set() 而不能用 ,因为后者是创建一个空字典,这种数据结构我们会在下一节进行讨论。

以下是一些简单的示例

>>>
>>> basket = 'apple', 'orange', 'apple', 'pear', 'orange', 'banana'
>>> print(basket)                      # show that duplicates have been removed
'orange', 'banana', 'pear', 'apple'
>>> 'orange' in basket                 # fast membership testing
True
>>> 'crabgrass' in basket
False

>>> # Demonstrate set operations on unique letters from two words
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  # unique letters in a
'a', 'r', 'b', 'c', 'd'
>>> a - b                              # letters in a but not in b
'r', 'd', 'b'
>>> a | b                              # letters in a or b or both
'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'
>>> a & b                              # letters in both a and b
'a', 'c'
>>> a ^ b                              # letters in a or b but not both
'r', 'd', 'b', 'm', 'z', 'l'

类似于 列表推导式,集合也支持推导式形式

>>>
>>> a = x for x in 'abracadabra' if x not in 'abc'
>>> a
'r', 'd'

字典

我愿称之为键值对集合
另一个非常有用的 Python 內置数据类型是字典 (参见映射类型 — dict)。字典在其他语言里可能会被叫做 联合内存 或 联合数组。与以连续整数为索引的序列不同,字典是以 关键字 索引的,关键字可以是任意不可变类型,通常是字符串或数字。如果一个元组只包含字符串、数字或元组,那么这个元组也可以用作关键字。但如果元组直接或间接地包含了可变对象,那么它就不能用作关键字。列表不能用作关键字,因为列表可以通过索引、切片或 append() 和 extend() 之类的方法来改变。

It is best to think of a dictionary as an unordered set of key: value pairs, with the requirement that the keys are unique (within one dictionary). A pair of braces creates an empty dictionary: . Placing a comma-separated list of key:value pairs within the braces adds initial key:value pairs to the dictionary; this is also the way dictionaries are written on output.

字典主要的操作是使用关键字存储和解析值。也可以用 del 来删除一个键值对。如果你使用了一个已经存在的关键字来存储值,那么之前与这个关键字关联的值就会被遗忘。用一个不存在的键来取值则会报错。

Performing list(d.keys()) on a dictionary returns a list of all the keys used in the dictionary, in arbitrary order (if you want it sorted, just use sorted(d.keys()) instead). 2 To check whether a single key is in the dictionary, use the in keyword.

以下是使用字典的一些简单示例

>>>
>>> tel = 'jack': 4098, 'sape': 4139
>>> tel['guido'] = 4127
>>> tel
'sape': 4139, 'guido': 4127, 'jack': 4098
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
'guido': 4127, 'irv': 4127, 'jack': 4098
>>> list(tel.keys())
['irv', 'guido', 'jack']
>>> sorted(tel.keys())
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False

dict() 构造函数可以直接从键值对序列里创建字典。

>>>
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
'sape': 4139, 'jack': 4098, 'guido': 4127

此外,字典推导式可以从任意的键值表达式中创建字典

>>>
>>> x: x**2 for x in (2, 4, 6)
2: 4, 4: 16, 6: 36

当关键字是简单字符串时,有时直接通过关键字参数来指定键值对更方便

>>>
>>> dict(sape=4139, guido=4127, jack=4098)
'sape': 4139, 'jack': 4098, 'guido': 4127

循环使用

当在字典中循环时,用 items() 方法可将关键字和对应的值同时取出

>>>
>>> knights = 'gallahad': 'the pure', 'robin': 'the brave'
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

当在序列中循环时,用 enumerate() 函数可以将索引位置和其对应的值同时取出

>>>
>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

当同时在两个或更多序列中循环时,可以用 zip() 函数将其内元素一一匹配。

>>>
>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your 0?  It is 1.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

如果要逆向循环一个序列,可以先正向定位序列,然后调用 reversed() 函数

>>>
>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

如果要按某个指定顺序循环一个序列,可以用 sorted() 函数,它可以在不改动原序列的基础上返回一个新的排好序的序列

>>>
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

有时可能会想在循环时修改列表内容,一般来说改为创建一个新列表是比较简单且安全的

>>>
>>> import math
>>> raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8]
>>> filtered_data = []
>>> for value in raw_data:
...     if not math.isnan(value):
...         filtered_data.append(value)
...
>>> filtered_data
[56.2, 51.7, 55.3, 52.5, 47.8]

以上是关于深度学习入门的主要内容,如果未能解决你的问题,请参考以下文章

深度学习Pytorch框架的入门简易代码模板及解析

深度学习 python怎么入门 知乎

Python深度学习入门级知识详解

机器学习深度学习的理论与实战入门建议整理

深度学习核心技术精讲100篇(七十四)-教你如何最快入门用户画像

深度学习核心技术精讲100篇(七十四)-教你如何最快入门用户画像