【0825 | Day 22】Numpy module

Numpy module

1. The role of the Numpy library

  1. Different from the list list, it provides array operations, array operations, as well as statistical distribution and simple mathematical models

  2. 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]]