1. Numpy是什么
NumPy是一个功能强大的Python库,允许更高级的数据操作和数学计算。
NumPy主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- Numerical和Python。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。这类数值计算广泛用于以下任务:
机器学习模型
:在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。
图像处理和计算机图形学
:计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。
数学任务
:NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。
2. numpy中的数据
NumPy提供的最重要的数据结构是一个称为NumPy数组的强大对象。NumPy数组是通常的Python数组的扩展。NumPy数组配备了大量的函数和运算符,快速编写各种类型计算的高性能代码。如何快速定义一维NumPy数组:
import numpy as np
my_array = np.array([1, 2, 3, 4, 5])
print (my_array)
首先使用import numpy作为np导入NumPy库。然后,创建了一个包含5个整数的简单NumPy数组。
用这个特定的NumPy数组能做些什么呢?
- 打印创建的数组的形状
- 可以打印各个元素
- 可以修改NumPy数组的元素
print (my_array.shape) #打印创建的数组的形状,意思就是 my_array 是一个包含5个元素的数组
print (my_array[0]) #可以打印各个元素,就像普通的Python数组一样,NumPy数组的起始索引编号为0
print (my_array[1]) #可以打印各个元素
my_array[0] = -1 #可以修改NumPy数组的元素
print (my_array)
[OUT]:
(5,)
1
2
[-1 2 3 4 5]
#生成一组为0的数组
array1 = np.zeros((8))
print(array1)
[OUT]:[0. 0. 0. 0. 0. 0. 0. 0.]
#生成一组为1的数组
array2 = np.ones((4))
print(array2)
[OUT]:[1. 1. 1. 1.]
#生成一组长度为5的随机数组,值在0-1范围内
array3 = np.random.random((5))
print(array3)
[OUT]:[0.35128523 0.86974783 0.91277674 0.28895727 0.89722863]
二维数组
:构建方法如下。当你使用函数np.zeros()或np.ones()时,你可以指定讨论数组大小的元组。多维数组可以用 my_array[i][j] 符号来索引,其中i表示行号,j表示列号。i和j都从0开始
#2行三列,值为0的二维数组
array1 = np.zeros((2,3))
print(array1)
[OUT]:
[[0. 0. 0.]
[0. 0. 0.]]
#2行4列,值为1的二维数组
array2 = np.ones((2,4))
print(array2)
[OUT]:
[[1. 1. 1. 1.]
[1. 1. 1. 1.]]
#3行3列,值为0-1的随机数组
array3 = np.random.random((3,3))
print(array3)
[[0.60186217 0.63522144 0.33580405]
[0.76600011 0.06017748 0.81463485]
[0.13711656 0.87586359 0.23073123]]
#第1行第2列的数据
array2[1][2]
[OUT]:
1.0
3. numpy中的数组操作
import numpy as np
a = np.array([[1.0, 2.0], [3.0, 4.0]])
b = np.array([[5.0, 6.0], [7.0, 8.0]])
sum = a + b
difference = a - b
product = a * b
quotient = a / b
print ("Sum = \n", sum)
print ("Difference = \n", difference)
print ("Product = \n", product)
print ("Quotient = \n", quotient)
# The output will be as follows:
Sum = [[ 6. 8.] [10. 12.]]
Difference = [[-4. -4.] [-4. -4.]]
Product = [[ 5. 12.] [21. 32.]]
Quotient = [[0.2 0.33333333] [0.42857143 0.5 ]]
乘法运算符执行逐元素乘法而不是矩阵乘法。 要执行矩阵乘法,你可以执行以下操作:
matrix_product = a.dot(b)
print ("Matrix Product = ", matrix_product)
4. 字符串的所有方法
1 name = "my name is {name} and my age is {age}"
2
3 # 首字母大写
4 name.capitalize()
5 # 统计某个字符的个数
6 name.count("a")
7 # name 放到中间一共打印50个字符,不够用 - 补上
8 name.center(50, "-")
9 # 以什么字符结尾 返回 Boolean 类型
10 name.endswith("ai")
11 # tab 长度
12 name.expandtabs()
13 # 取某个字符的索引,从0开始
14 print(name.find("y"))
15
16 print(name.format(name="xiaosai", age=18))
17 print(name.format_map({"name": "xiaosai", "age": 18}))
18
19 # 是不是一个阿拉伯数字(包含所有的英文字符 and 1~9)
20 print(name.isalnum())
21 # 是不是纯英文字符(大小写)
22 print(name.isalpha())
23 # 是不是小数(忘记吧)
24 # print(.isdecimal())
25 # 是不是整数
26 print(name.isdigit())
27
28 # 判断是不是一个合法的标识符(是不是一个合法的变量名)
29 print("3Sink".isidentifier())
30 # 是不是小写
31 print("sink".islower())
32 # 是不是一个数字
33 print("36663".isnumeric())
34 # 是不是空格
35 print("36663".isspace())
36 # 是不是Title (单词每个首字母大写)
37 print("My Name Is Koi".istitle())
38 # 忘记 tty file ,drive file
39 print("My Name Is Koi".isprintable())
40 # 是不是大写
41 print("XIAOSAI".isupper())
42 # jone (1-2-3)
43 print('-'.join(['1', '2', '3']))
44 # 右边
45 print(name.ljust(50, "-"))
46 # 左边
47 print(name.rjust(50, "-"))
48
49 # 大小写转换
50 print("NiuMoWang".lower())
51 print("NiuMoWang".upper())
52
53 # strip 是去两边,l 去左边,r去右边
54 print("\nname\n".strip())
55 print("\nname".lstrip())
56 print("name\n".rstrip())
57
58 # 自己尝试(类似于加密)
59 p = str.maketrans("kaieuq", "123456")
60 print("xiaosai".translate(p))
61
62 print("xiaosai".replace("a", "A", 1))
63 # 找最后边字符的坐标
64 print("xiaosai".rfind("a"))
65 # 分割
66 print("xiao,sai".split(","))
67 # 按照换行分割
68 print("xiao\ns\na\ni".splitlines())
69
70 print("xiao sai".swapcase())
71 # 首字母大写,变成title
72 print("xiao sai".title())
73
74 print("xiaosai".zfill(30))
## 5. list对象的所有方法
list.append():再列表的尾部添加对象
list.extend(iterable)
5. 列表的所有方法
- 列表的元素可以循环遍历
- for x in list1:
- 如果要访问循环体内每个元素的索引,请使用内置的 enumerate 函数:
animals = ['cat', 'dog', 'monkey']
for idx, animal in enumerate(animals):
print('#%d: %s' % (idx + 1, animal))
1 list.append(x)
##在列表的尾部添加对象x
2 list.extend(iterable)
3 list.insert(i, x)
##再指定位置插入对象x,i表示要插入位置的索引
4 list.remove(x)
##删除指定元素x,如果没有这个元素会报错
5 list.pop([i])
##删除列表中指定位置i的元素,如果没有找到指定索引,会删除列表中最后一个元素
6 list.clear()
##清空列表中所有的元素
7 list.index(x[, start[, end]])
##返回列表中元素x在列表中的索引位置,如果没有x元素则会报错
8 list.count(x)
##返回元素x在列表中出现的次数
9 list.sort(key=None, reverse=False)
10 list.reverse()
##转置列表中的元素,就是重新排序,最后一个变第1个
11 list.copy()
##列表的浅拷贝
6. 字典的所有方法
字典是Python中唯一内建的映射类型。字典中没有特殊的顺序,但都是存储在一个特定的键(key)下面,键可以是数字,字符串,甚至是元组
字典可以遍历
# 字典的创建方式
# 方式一 {key: value}
dict1 = {'one': 1, 'two': 2, 'three': 3}print(dict1)
# 方式二 dict(zip(keys, values))
# dict([(k, v), (k, v)])
dict2 = dict([('one', 1), ('two', 2), ('three', 3)])print(dict2)
# dict(((k, v), (k, v)))
dict3 = dict((('one', 1), ('two', 2), ('three', 3)))
print(dict3)
# 方式三 dict(key=value)
dict4 = dict(one=1, two=2, three=3)
print(dict4)
# 方式四 字典推导式
lst1 = ['one', 'two', 'three']
lst2 = [1, 2, 3]
dict5 = {lst1[i]: lst2[i] for i in range(len(lst1))}print(dict5)
# 方式五 fromkeys# 没有指定value,默认
Nonedict6 = dict.fromkeys(['k1', 'k2', 'k3'])print(dict6) # {'k1': None, 'k2': None, 'k3': None}
1 dict.setdefault(key, value)
##如果字典dict中已经有key了,则返回该key对应的value,如果没有则把key,value新加入到字典中
2 dict.pop(key,value)
##如果字典中有这个key则删除key并返回该key对应的value,如果字典中没有key,且没有给value,则会报错keyerror
3 dict.clear()
##清空所有的键值对
4 dict.get(key,value)
##如果字典中有这个key则返回该key对应的value,如果没有key则返回none
5 dict.keys()
##返回字典中所有的key,类似于列表,但没有索引
6 dict.values()
##返回字典中所有的value,类似于列表,但没有索引
7 dict.items()
##返回字典中所有的键值对,可以去遍历键值对,for it in dict.items():
8 dict.update()
##更新键值对,有则覆盖,无则添加
9 dict.copy()
##字典的浅拷贝
10 dict.popitem()
##随机删除字典中的 键和值
keys()的使用:
dic6 = {'name': 'lucy', 'age': 18, 'hobby_list': ['study', 'play', 'shopping']}
# 1. 特殊的数据类型,类似于列表,但是没有索引
print(dic6.keys(), type(dic6.keys()))
# dict_keys(['name', 'age', 'hobby_list']) <class 'dict_keys'>
# 2. 可以转化成列表
l1 = list(dic6.keys())
print(l1) # ['name', 'age', 'hobby_list']
# 3. 循环遍历
for k in dic6.keys():
print(k, end=',')
# name,age,hobby_list,
for k in dic6:
print(k, end=',')
# name,age,hobby_list,
values()的使用:
dic7 = {'name': 'lucy', 'age': 18, 'hobby_list': ['study', 'play', 'shopping']}
# 1. 特殊的数据类型,类似于列表,但是没有索引
print(dic7.values())
# dict_values(['lucy', 18, ['study', 'play', 'shopping']])
# 2. 可以转化成列表
print(list(dic7.values()))
# ['lucy', 18, ['study', 'play', 'shopping']
# 3. 循环遍历
for val in dic7.values():
print(val, end=',')
# lucy,18,['study', 'play', 'shopping'],
7. 集合
集合是不同元素的无序集合
集合的两个特点:元素不重复和无序
1 add()
##为集合添加元素
2 clear()
##移除集合中的所有元素
3 copy()
##浅拷贝一个集合
4 difference()
##返回多个集合的差集
5 difference_update()
##移除集合中的元素,该元素在指定的集合也存在
6 discard()
##删除集合中指定的元素
7 intersection()
##返回集合的交集
8 intersection_update()
##返回集合的交集
9 isdisjoint()
##判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
10 issubset()
##判断指定集合是否为该方法参数集合的子集
11 issuperset()
##判断该方法的参数集合是否为指定集合的子集
12 pop()
##随机移除元素
13 remove()
##移除指定元素
14 symmetric_difference()
##返回两个集合中不重复的元素集合
15 symmetric_difference_update()
#移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中
16 union()
#返回两个集合的并集
17 update()
#给集合添加元素
8. 元组
元组和字符串都是不可变的,只能做复制或切片操作