环境安装
anaconda 安装 ,conda : python 多版本控制
1# 查看环境
2conda env list
3# 创建环境 ,最新的 python
4conda create --name myenv
5# 指定 3.10 python 版本
6conda create -n myenv3.10 python=3.10
7# 激活
8conda activate myenv3.10
9# 删除环境
10conda remove --name myenv3.10 --all
11# 克隆环境
12conda create --name cpname --clone oldname
13pip list
14conda list
pycharm 配置conda环境。
1pip install jupyter
2# 浏览器会打开 jupyter notebook
3# 在需要打开的项目中 执行。
4jupyter notebook
5# 数据分析包, 可以处理表格数据
6pip install pandas
7# 绘图包
8pip install matplotlib
9# 图像处理库, 视频处理
10pip install opencv-python
11# 安装dataspell, 操控jupyter .
NumPy
它是 Python 进行数值计算的一个类库,用来计算、处理高阶矩阵和数组。和 Math、Time 库一样,NumPy 是 Python 中的一个扩展库,提供了 Python 原生所不具备的多维数组对象(类似生活中使用的表格)。另外,NumPy 还有线性代数中的矩阵运算功能等,这为科研和实际工作都带来了不少的便捷。
特定: 底层基于 c 实现比 python 实现同样的功能快数十倍。
Numpy 的数据类型主要分为以下几种。
- 整数类型:包括 int8、int16、int32、int64,这些类型分别表示 8 位、16 位、32 位、64 位的带符号整数。
- 浮点类型:包括 float16、float32、float64,这些类型分别表示 16 位、32 位、64 位的浮点数。
- 复数类型:包括 complex64、complex128,这些类型分别表示 64 位和 128 位的复数。
- 布尔类型:即 bool_,它只有两个取值:True 和 False。
- 字符串类型:即 str_,用于存储字符串。
Numpy 中的数组——ndarray
ndarray 对象分为两个部分:一个部分是 header、一个是 data。header 部分可以理解为数组属性块,里面有着 ndarray 数组对象所需要的一些属性,比如该数组的步长、数组的形状、数组中数据的类型,等等。data 部分就可以理解为 C 语言中的数组了,存储的是数据。
numpy常用操作
-
zeros 方法创建全 0 数组 , ones 方法创建全 1 数组
- 不管是 0 填充还是 1 填充,默认的数据类型都是为浮点数
-
empty 方法创建未初始化数组
- empty 方法是用来创建一个指定形状、指定数据类型并且未初始化的数组。未初始化指的就是对于其中的数据并没有被指定填充值。
-
eye 方法创建对角数组
-
从现有数组中生成新数组
- 利用现有数组生成新数组的方式大概有三种方法,分别为 array 方法、asarray 方法以及 copy 方法
- 方法:numpy.array(object,dtype,shape)
1object 为要转化为 Numpy 数组的数据对象,可以为列表、元组或者数组; 2dtype 为转化后数组的数据类型,若不设置则与原数据对象的数据类型保持一致; 3shape 用于指定数组的形状,若不设置则与原数据对象的 shape 相同。
- 方法:numpy.array(object,dtype,shape)
- 方法:numpy.asarray(object,dtype)
1 object 为要转化为 Numpy 数组的数据对象,可以为列表、元组或者数组; 2 dtype 为转化后数组的数据类型,若不设置则与原数据对象的数据类型保持一致。
- 利用现有数组生成新数组的方式大概有三种方法,分别为 array 方法、asarray 方法以及 copy 方法
-
linspace 方法
- 方法:linspace(start,stop,num)
- start 为数据的起始点。
- stop 为数据的结束点。
- num 为等步长生成的数据量。
-
arange 方法
- 方法:arange(start,stop,step,dtype)
- start 为数据起始点。
- stop 为数据终点。
- step 为数据之间的步长,默认为 1。
- dtype 用于指定数组的数据类型,默认为浮点型。
-
均匀分布随机数组
- 生成均匀分布随机数组主要有 rand 方法和 uniform 两种方法。
-
正态分布随机数组
- normal(loc,scale,size)
- loc 为正态分布数组的均值,
- scale 为数组的方差,
- 通过 size 属性我们能够设置数组的形状或者数据量。
- standard_normal(size)
- 利用 standard_normal 方法用于生成指定形状的符合标准正态分布的数组
- size 为随机数组的形状。
- normal(loc,scale,size)
1import numpy as np
2
3a = np.arange(15).reshape(3, 5)
4print("数组的维度:", a.shape)
5print("数组轴的个数:", a.ndim)
6print("数组元素类型:", a.dtype)
7print("数组中每个元素的字节大小:", a.itemsize)
8print("数组元素的总个数:", a.size)
9print("类型查询:", type(a))
10
11# 创建一个数组
12b = np.array([6, 7, 8])
13print("数组b:", b)
14print("数组b类型:", type(b))
15
16a = np.array([2, 3, 4])
17print("数组a元素类型:", a)
18print("数组a类型:", a.dtype)
19
20b = np.array([1.2, 3.5, 5.1])
21print("数组b元素类型:", b.dtype)
22
23# zeros 方法创建全 0 数组
24zeros1 = np.zeros((3, 4))
25print("数组zeros1:", zeros1)
26
27# ones 方法创建全 1 数组
28ones1 = np.ones((2, 3, 4))
29print("数组ones1:", ones1)
30
31# empty 方法创建未初始化数组 为了程序的安全,未初始化的变量程序会根据编译器的设置填充一些值,比如这里的随机值。
32empty1 = np.empty((2, 3))
33print("数组empty1:", empty1)
34
35# eye 方法创建对角数组,创建一个五行五列的对角矩阵
36eyeArry=np.eye(5)
37print(eyeArry)
38
39
40
41np_arange = np.arange(10, 20, 5, dtype=int)
42print("arange创建np_arange:", np_arange)
43print("arange创建np_arange的元素类型:", np_arange.dtype)
44print("arange创建np_arange的类型:", type(np_arange))
45
46# matrix 是 ndarray 的子类,只能生成 2 维的矩阵
47x2 = np.matrix("1,2;3,4")
48print(x2)
49x3 = np.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
50print(x3)
51
52# 生成指定维度大小(3行4列)的随机多维浮点型数据(二维),rand固定区间0.0 ~ 1.0
53arr = np.random.rand(3, 4)
54print(arr)
55print(type(arr))
56
57# 生成指定维度大小(3行4列)的随机多维整型数据(二维),randint()可以指定区间(-1, 5)
58arr = np.random.randint(-1, 5, size=(3, 4))
59print(arr)
60print(type(arr))
61
62# 生成指定维度大小(3行4列)的随机多维浮点型数据(二维),uniform()可以指定区间(-1, 5)产生-1到5之间均匀分布的样本值
63# uniform(low,high,size)
64arr = np.random.uniform(-1, 5, size=(3, 4)) #
65print(arr)
66print(type(arr))
67
68# 初始化3行4列数组,数据类型为float64
69zeros_float_arr = np.zeros((3, 4), dtype=np.float64)
70print(zeros_float_arr)
71print(zeros_float_arr.dtype) # float64
72
73# astype转换数据类型,将已有的数组的数据类型转换为int32
74zeros_int_arr = zeros_float_arr.astype(np.int32)
75print(zeros_int_arr)
76print(zeros_int_arr.dtype) # int32
77
78# randn() 返回具有标准正态分布的序列。
79arr = np.random.randn(2, 3)
80
81print(arr)
82
83print(np.ceil(arr))
84
85print(np.floor(arr))
86
87print(np.rint(arr))
88
89print(np.isnan(arr))
90
91print(np.multiply(arr, arr))
92
93print(np.divide(arr, arr))
94
95print(np.where(arr > 0, 1, -1))
96
97arr = np.arange(12).reshape(3, 4)
98
99print(arr)
100
101print(np.cumsum(arr)) # 返回一个一维数组,每个元素都是之前所有元素的 累加和
102
103print(np.sum(arr)) # 所有元素的和
104
105print(np.sum(arr, axis=0)) # 数组的按列统计和
106
107print(np.sum(arr, axis=1)) # 数组的按行统计和
108
109# 比较函数
110# np.any(): 至少有一个元素满足指定条件,返回True
111# np.all(): 所有的元素满足指定条件,返回True
112
113
114arr = np.random.randn(2, 3)
115
116print(arr)
117
118print(np.any(arr > 0))
119
120print(np.all(arr > 0))
121
122# 去重 np.unique():找到唯一值并返回排序结果,类似于Python的set集合 [1 2 3 4]
123arr = np.array([[1, 2, 1], [2, 3, 4]])
124print(arr)
125print(np.unique(arr))
126
127# 数据排序
128
129arr = np.array([1, 2, 34, 5])
130print("原数组arr:", arr)
131
132# np.sort()函数排序,返回排序后的副本
133sortarr1 = np.sort(arr)
134print("numpy.sort()函数排序后的数组:", sortarr1)
135
136# ndarray直接调用sort,在原数据上进行修改
137arr.sort()
138print("数组.sort()方法排序:", arr)
139
140# 矩阵乘法
141x = np.array([[1, 2, 3], [4, 5, 6]])
142y = np.array([[6, 23], [-1, 7], [8, 9]])
143
144print(x)
145print(y)
146
147print("------")
148print(x.dot(y))
149
150print("------")
151print(np.dot(x, y))
152
153a = np.array([[1, 2, 3], [4, 5, 6]])
154b = np.array([[2, 2, 2], [3, 3, 3]])
155print("--------")
156print(a * b)