在之前的机器学习基础中,我们介绍了科学计算库numpy,numpy十分适用于对矩阵的操作,Numpy的类型是一个强大的N维数组对象ndarray,是广播功能函数。其整合C/C++.fortran代码的工具 ,更是Scipy、Pandas等的基础,接下来就具体详细的介绍下numpy的常用函数。
.ndim :维度
.min :最小元素
.max :最大元素
.shape :矩阵形状(维度大小)
.dypte :数据类型N
.size :元素数量
.itemsize :每个元素的大小,以字节为单位 ,每个元素占4个字节
我们在开发中如果遇到没见过的函数或者不知道怎么使用的时候可以使用 print(help(函数名)) 的方式进行查询。或者可以通过IDE 使用ctrl + 鼠标左键点进函数观察内部参数结构
np.ones(shape) : 产生形状为shape的元素全为1的矩阵
np.zeros((shape),dtype = np.int32) : 生成int32类型的元素值全部为0 的矩阵
np.full(shape, val) : 使用指定元素val填充形状为shape的矩阵
np.eye(n) : 产生单位矩阵
np.ones_like(a) : 参照a矩阵的形状创建元素为1的矩阵
np.zeros_like(a) : 参照a矩阵的形状创建元素为0的矩阵
np.full_like (a, val) : 参照a矩阵的形状创建元素为val的矩阵
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) : 设置在一段指定区间内等距离产生线性数组
.reshape(shape) : 不改变元素将矩阵形状变换成shape
.resize(shape) : 改变元素将矩阵大小变换成shape
.swapaxes(ax1, ax2) : 将两个维度调换
.flatten() : 对数组进行降维,变成一维数组
print('正态分布随机数')
samples = np.random.normal(size=(4, 4))
print(samples)
"""
正态分布随机数
[[-0.04654118 -1.12871659 -0.09074357 0.64225383]
[ 0.92523296 -0.28582878 0.64200935 0.35932678]
[-0.17259488 1.60941229 1.6294268 1.37600353]
[-0.33474123 -1.11963733 0.72337203 -0.6021142 ]]
"""
print('批量按正态分布生成0到1的随机数')
N = 10
print(normalvariate(0, 1) for _ in range(N))
print(np.random.normal(size=N)) # 与上面代码等价
"""
批量按正态分布生成0到1的随机数
at 0x00000280BF6AE6D0>
[ 0.48312972 -0.63066442 1.52675927 -1.0759162 -0.42632616 -2.83174232
0.60853125 1.10871241 -1.08142181 -0.41545163]
"""
print('读取txt文件做为数组')
arr = np.loadtxt('array_ex.txt', delimiter = ',')
print(arr)
"""
读取txt文件做为数组
[[ 0.580052 0.18673 1.040717 1.134411]
[ 0.194163 -0.636917 -0.938659 0.124094]
[-0.12641 0.268607 -0.695724 0.047428]
[-1.484413 0.004176 -0.744203 0.005487]
[ 2.302869 0.200131 1.670238 -1.88109 ]
[-0.19323 1.047233 0.482803 0.960334]]
"""
矩阵连接
print('连接两个二维数组')
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])
print(np.concatenate([arr1, arr2], axis = 0)) # 按行连接
print(np.concatenate([arr1, arr2], axis = 1)) # 按列连接
"""
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
"""
# 所谓堆叠,参考叠盘子。。。连接的另一种表述
print('垂直stack与水平stack')
print(np.vstack((arr1, arr2))) # vstack 垂直堆叠
print(np.hstack((arr1, arr2))) # hstack 水平堆叠
"""
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
"""
矩阵加法
import numpy as np
print('矩阵加法')
x = np.array([[1., 2.],
[3., 4.]])
y = np.array([[1., 2.],
[3., 4.]])
res = np.add(x, y)
"""
[[ 2. 4.]
[ 6. 8.]]
"""
矩阵点乘
np.multiply(x,y)
"""
[[1. 4.]
[9. 16.]]
"""
矩阵乘法
x = np.array([[1., 2.], [3., 4.]])
y = np.array([[1., 2.], [3., 4.]])
x.dot(y)
"""
[[ 7. 10.]
[ 15. 22.]]
"""
矩阵求逆
x = np.array([[1., 2.], [3., 4.]])
x.T
"""
[[ 1. 3.]
[ 2. 4.]]
"""
矩阵开方
x = np.array([[1., 2.], [3., 4.]])
np.sqrt(x)
"""
[[1. 1.41421356]
[1.73205081 2. ]]
"""
矩阵内元素求和
x = np.array([[1., 2.], [3., 4.]])
#对元素进行求和操作
np.sum(x)
# 10
# 对数组中元素按列求和操作
np.sum(x,axis=0)
# [4, 6]
# 对数组中元素按行求和操作
np.sum(x,axis=1)
# [3, 7]
矩阵内元素取平均
# 取平均数同理
np.mean(x)
# 2.5
# 对数组元素按列求平均值
np.mean(x,axis=0)
array([2., 3.])
# 对数组元素按行求平均值
np.mean(x, axis=1)
array([1.5, 3.5])
矩阵整体扩展
将矩阵看做一部分然后根据操作进行扩展
x = np.array([[1., 2.], [3., 4.]])
# 把x看成一个整体,然后按照1行2列的规则去重复
np.tile(x,(1,2))
# [[1, 2, 1, 2],
# [3, 4, 3, 4]])
# 把x看成一个整体,然后按照2行1列的规则去重复
np.tile(x,(2,1))
# [[1, 2],
# [3, 4],
# [1, 2],
# [3, 4]]
# 把x看成一个整体,然后在行上重复2次,再列上重复3次
np.tile(x,(2,3))
# [[1, 2, 1, 2, 1, 2],
# [3, 4, 3, 4, 3, 4],
# [1, 2, 1, 2, 1, 2],
# [3, 4, 3, 4, 3, 4]]
矩阵元素排序
print('一维数组排序')
arr = np_random.randn(8)
arr.sort()
print(arr)
"""
一维数组排序
[-1.58539703 -1.08004045 -0.2402834 0.00856469 0.01625886 0.90568968
1.0909142 1.78178895]
"""
print()
print('二维数组排序')
arr = np_random.randn(5, 3)
print(arr)
"""
二维数组排序
[[ 0.16347704 -0.74452535 0.27419924]
[ 0.00694533 1.3959633 -0.30984013]
[-0.4869236 0.73660478 0.94050794]
[-0.29577042 1.4815118 -1.68987039]
[-1.26560252 -0.0619319 -1.31980381]]
"""
arr.sort(1) # 对每一行元素做排序
print(arr)
"""
[[-0.74452535 0.16347704 0.27419924]
[-0.30984013 0.00694533 1.3959633 ]
[-0.4869236 0.73660478 0.94050794]
[-1.68987039 -0.29577042 1.4815118 ]
[-1.31980381 -1.26560252 -0.0619319 ]]
"""