【0825 | Day 22】Numpy模块

Numpy模块

一、Numpy库的作用

  1. 区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型

  2. 计算速度快,甚至要由于python内置的简单运算,使得其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似。

二、为什么用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]

三、创建Numpy数组

numpy数组即numpy的ndarray对象,创建numpy数组就是把一个列表传入np.array()方法。

#解决以上问题

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模块

四、Numpy数组常用属性

# 属性(可以记)

'''

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]]
posted @ 2019-08-25 17:35  fxyadela  阅读(210)  评论(0编辑  收藏  举报