【0825 | Day 22】Numpy module
content
Numpy module
1. The role of the Numpy library
Different from the list list, it provides array operations, array operations, as well as statistical distribution and simple mathematical models
The calculation speed is fast, and even due to the simple operations built into python, it becomes a dependency package of pandas, sklearn and other modules. Advanced frameworks such as TensorFlow, PyTorch, etc., have array operations very similar to numpy.
2. Why use Numpy
lis1 = [1, 2, 3] # 向量
lis2 = [4, 5, 6] # 向量
# 要得出[4,10,18]的过程有些复杂
lis = []
for i in range(len(lis1)):
lis.append(lis1[i] * lis2[i])
print(lis)
#[4,10,18]
3. Create a Numpy array
A numpy array is a numpy ndarray object. Creating a numpy array is to pass a list into the np.array() method.
#解决以上问题
import numpy as np
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
print(arr1*arr2)
# [ 4 10 18]
# numpy数组
arr = np.array([1, 2, 3])
print(arr) # 一维的numpy数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2) # 二维的numpy数组(一般就是二维)
arr3 = np.array([[[1, 2, 3], [4, 5, 6]],[[1, 2, 3], [4, 5, 6]],[[1, 2, 3], [4, 5, 6]]])
print(arr3)
# 三维的不使用numpy模块,使用tensorflow/pytorch模块
4. Common properties of Numpy arrays
# 属性(可以记)
'''
T 数组的转置(对高维数组而言)
dtype 数组元素的数据类型
size 数组元素的个数
ndim 数组的维数
shape 数组的维度大小(以元组形式)
astype 类型转换
'''
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2) # 二维的numpy数组(一般就是二维)
#[[1 2 3]
# [4 5 6]]
print(arr2.T) # 行与列互换
print(arr2.transpose()) # 行与列互换
#[[1 4]
# [2 5]
# [3 6]]
print(arr2.dtype) # python中的数据类型
#int32
print(arr2.astype(np.float64).dtype)
#float64
print(arr2.size)
#6
print(arr2.shape)
#(2, 3)
print(arr2.ndim)
#2
#切片
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2) # 二维的numpy数组(一般就是二维)
#[[1 2 3]
# [4 5 6]]
print(arr2[:, :])
#[[1 2 3]
# [4 5 6]]
print(arr2[0:1, :])
#[[1 2 3]]
print(arr2[0:1, 0:1])
#[[1]]
print(arr2[0, :])
#[1 2 3]
print(arr2[0, 0],type(arr2[0, 0]))
#1 <class 'numpy.int32'>
print(arr2[0, [0,2]])
#[1 3]
print(arr2[0, 0] + 1)
#2
# 修改值
lis = [1,2,3]
lis[0] = 2
print(lis)
#[2, 2, 3]
arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 可变数据类型
print(arr2) # 二维的numpy数组(一般就是二维)
#[[1 2 3]
# [4 5 6]]
arr2[0, :] = 0
print(arr2)
#[[0 0 0]
# [4 5 6]]
arr2[1, 1] = 1
print(arr2)
#[[0 0 0]
# [4 1 6]]
arr2[arr2 < 3] = 3 # 布尔取值
print(arr2)
#[[3 3 3]
# [4 3 6]]
#合并
arr1 = np.array([[1, 2, 3], [4, 5, 6]]) # 可变数据类型
print(arr1)
#[[1 2 3]
# [4 5 6]]
arr2 = np.array([[7, 8, 9], [10, 11, 12]]) # 可变数据类型
print(arr2)
#[[ 7 8 9]
# [10 11 12]]
print(np.hstack((arr1,arr2))) # 行合并
#[[ 1 2 3 7 8 9]
# [ 4 5 6 10 11 12]]
print(np.vstack((arr1,arr2))) # 列合并
#[[ 1 2 3]
# [ 4 5 6]
# [ 7 8 9]
# [10 11 12]]
print(np.concatenate((arr1, arr2))) # 默认列合并
#[[ 1 2 3]
# [ 4 5 6]
# [ 7 8 9]
# [10 11 12]]
print(np.concatenate((arr1, arr2),axis=1)) # 1表示行;0表示列
#[[ 1 2 3 7 8 9]
# [ 4 5 6 10 11 12]]
# 通过函数创建numpy数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]]) # 可变数据类型
print(arr1)
#[[1 2 3]
# [4 5 6]]
print(np.zeros((5, 5)))
#[[0. 0. 0. 0. 0.]
# [0. 0. 0. 0. 0.]
# [0. 0. 0. 0. 0.]
# [0. 0. 0. 0. 0.]
# [0. 0. 0. 0. 0.]]
print(np.ones((5, 5)) * 100)
#[[100. 100. 100. 100. 100.]
# [100. 100. 100. 100. 100.]
# [100. 100. 100. 100. 100.]
# [100. 100. 100. 100. 100.]
# [100. 100. 100. 100. 100.]]
print(np.eye(5)) #单位矩阵
#[[1. 0. 0. 0. 0.]
# [0. 1. 0. 0. 0.]
# [0. 0. 1. 0. 0.]
# [0. 0. 0. 1. 0.]
# [0. 0. 0. 0. 1.]]
print(np.arange(1,10,2)) # 生成一维的
#[1 3 5 7 9]
print(np.linspace(0,20,10)) # 平均分成10份 # 构造x坐标轴的值
#[ 0. 2.22222222 4.44444444 6.66666667 8.88888889 11.11111111 13.33333333 15.55555556 17.77777778 20. ]
arr = np.zeros((5, 5))
print(arr.reshape((1,25)))
#[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
# 数组运算
arr1 = np.array([[1, 2, 3], [4, 5, 6]]) # 可变数据类型
print(arr1)
#[[1 2 3]
# [4 5 6]]
arr2 = np.array([[7, 8, 9], [10, 11, 12]]) # 可变数据类型
print(arr2)
#[[ 7 8 9]
# [10 11 12]]
# +-*/ // % **
print(arr1*arr2)
#[[ 7 16 27]
# [40 55 72]]
print(arr1+arr2)
#[[ 8 10 12]
# [14 16 18]]
# 运算函数
arr1 = np.array([[1, 2, 3], [4, 5, 6]]) # 可变数据类型
print(arr1)
#[[1 2 3]
# [4 5 6]]
print(np.sin(arr1))
#[[ 0.84147098 0.90929743 0.14112001]
# [-0.7568025 -0.95892427 -0.2794155 ]]
print(np.cos(arr1))
#[[ 0.54030231 -0.41614684 -0.9899925 ]
# [-0.65364362 0.28366219 0.96017029]]
print(np.sqrt(arr1))
#[[1. 1.41421356 1.73205081]
# [2. 2.23606798 2.44948974]]
print(np.exp(arr1))
#[[ 2.71828183 7.3890561 20.08553692]
# [ 54.59815003 148.4131591 403.42879349]]
# 额外补充(了解)
arr1 = np.array([[1, 2, 3], [4, 5, 6]]) # 可变数据类型
arr2 = np.array([[7, 8, 9], [10, 11, 12]]) # 可变数据类型
# m*n × n*m = m*m
print(np.dot(arr1,arr2.T))
#[[ 50 68]
# [122 167]]
# 求逆
arr1 = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]])
print(np.linalg.inv(arr1))
#[[ 0.5 -1. 0.5 ]
# [-3. 3. -1. ]
# [ 2.16666667 -1.66666667 0.5 ]]
# numpy的数学方法(了解)
arr1 = np.array([[1, 2, 3], [4, 5, 6]]) # 可变数据类型
print(arr1.var())
#2.9166666666666665
print(arr1.std())
#1.707825127659933
print(arr1.mean())
#3.5
print(arr1.cumsum()) # 累加和
#[ 1 3 6 10 15 21]
# numpy随机数(了解)
print(np.random.rand(3,4))
#[[0.52306236 0.81121148 0.69762517 0.91050912]
# [0.95161962 0.02723011 0.41058941 0.62561587]
# [0.33066979 0.89355263 0.50560677 0.46214671]]
print(np.random.randint(1,10,(3,4))) # 最小值1,最大值10,3*4
#[[7 7 2 5]
# [3 9 8 3]
# [9 4 5 8]]
print(np.random.choice([1,2,3,4,5],3))
#[5 1 4]
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.random.shuffle(arr1)
print(arr1)
#[[1 2 3]
# [4 5 6]
# [7 8 9]]
# 随机数种子 # 所有的随机数是按照随机数中子生成的
import time
# 重点
np.random.seed(int(time.time()))
np.random.seed(1)
arr1 = np.random.rand(3,4) # 可变数据类型
print(arr1)
#[[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01]
# [1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01]
# [3.96767474e-01 5.38816734e-01 4.19194514e-01 6.85219500e-01]]
rs = np.random.RandomState(1)
print(rs.rand(3,4))
#[[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01]
# [1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01]
# [3.96767474e-01 5.38816734e-01 4.19194514e-01 6.85219500e-01]]