机器学习_Numpy科学计算库

Numpy科学计算库

一:创建Numpy数组

1.定义

Numpy(Numeric Python)

  • 提供了多维数组、矩阵的常用操作和一些高效的科学计算函数。
  • 底层运算通过C语言实现,处理速度快、效率高,适用于大规模多维数组。
  • 可以直接完成数组和矩阵运算,无需循环。

2.导入Numpy库

  • import numpy as np (在调用Numpy中的函数时,一定要加上前缀np)
  • from numpy import * (在调用Numpy中的函数时,可以不加前缀)

3.创建数组

array([ 列表 ]/( 元组 ), dtype= 数据类型 )

  • dtype数据类型接口可省略,在使用Python列表或元组、创建NumPy数组时,所创建的数组类型,由原来的元素类型推导而来。也可以由dtype来直接规定;
  • NumPy要求数组中所有元素的数据类型必须是一致的。

4.数组的属性

属性描述
ndim数组的维度
shape数组的形状
size数组元素的总个数
dtype数组中元素的类型
itemsize数组中每个元素的字节数

5.创建特殊数组

函数功能描述
np.arange(起始数字,结束数字,步长,dtype)创建数字序列数组
np.ones(shape,dtype)创建全1数组
np.zeros(shape,dtype)创建全0数组
np.eye(shape,dtype)创建单位矩阵
np.linspace(起始数字,结束数字,元素个数,dtype)创建等差数列
np.logspace(起始指数,结束指数,元素个数,基,dtype)创建等比数列

6.转换数组

asarray()函数: 将列表或元组转化为数组对象。

  • 当数据源本身是一个ndarray对象时,array()会复制出一个副本,占用新的内存,而asarray()则不复制副本, 它直接引用原数组。

二:数组运算

1.数组元素切片

  • 可以使用切片来访问NumPy数组中的一部分,切片方法和Python序列数据结构的切片一样;

2.改变数组形状

函数功能描述
np.reshape(shape)不改变当前数组,按照shape创建新的数组
np.resize(shape)改变当前数组,按照shape创建数组
  • 当改变形状时,应该考虑到数组中元素的个数,确保改变前后,元素总个数相等;
  • 参数-1:根据数组中元素总个数、以及其他维度的取值,来自动计算出这个维度的取值,例如:
import numpy as np
a = np.arange(12)
b = a.reshape(3,-1)
print(a)
print(b)
print(b.shape)
[ 0  1  2  3  4  5  6  7  8  9 10 11]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
(3, 4)

3.数组运算

加减乘除
  • 相加的2个数组的形状和长度应该一致,否则就会出现错误;
  • 一维数组可以和多维数组相加,相加时会将一维数组扩展至多维;
  • 数组之间的减法、乘法、除法运算,和加法运算规则相同;
  • 当两个数组中元素的数据类型不同时,精度低的数据类型,会自动转换为精度更高的数据类型,然后再进行运算。
矩阵乘法
  • 乘号运算符 *:矩阵中对应的元素分别相乘
  • 矩阵相乘{np.dot();np.matmul()}:按照矩阵相乘的规则运算
数组的的转置和求逆
  • 数组转置—— np.transpose()
  • 数组求逆—— np.linalg.inv()

4.数组元素运算

函数功能描述
np.sum(array,axis)计算所有元素的和
np.prod()计算所有元素的乘积
np.diff()计算数组的相邻元素之间的差
np.sqrt()计算各元素的平方根
np.exp()计算各元素的指数值
np.abs()取各元素的绝对值
  • sum()——对数组中所有元素求和

  • 按行求和&按列求和

    • 轴(axes):数组中的每一个维度被称为一个
    • 秩(rank):轴的个数,一维数组(rank=1),二维数组(rank=2),三维数组(rank=3)
      轴

    二维数组举例

c = np.arange(12).reshape(3,4)
print(c)
np.sum(c,axis=0)  #按列求和
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

array([12, 15, 18, 21])
np.sum(c,axis=1)  #按行求和
array([ 6, 22, 38])
  • sprt()函数实例:
d = np.logspace(1,4,4,base=2)
d
array([ 2.,  4.,  8., 16.])
np.sqrt(d)
array([1.41421356, 2.        , 2.82842712, 4.        ])

5.数组堆叠运算

np.stack( ( 数组 1, 数组 2,…) , axis)
堆叠

  • 执行NumPy函数前,如果有python列表,则首先自动把Python列表转换为NumPy数组,和数据类型转换,然后再进行堆叠

三:矩阵和随机数

1.矩阵

  • 矩阵的创建
  • np.matrix(字符串/列表/元组/数组 )
  • np.mat(字符串/列表/元组/数组 )
  • 矩阵对象的属性
属性描述
.ndim矩阵的维数
.shape矩阵的形状
.size矩阵的元素总个数
.dtype矩阵元素的数据类型
  • 矩阵运算
  • 矩阵相乘 a*b
  • 矩阵转置 a.T
  • 矩阵求逆 a.I

2.随机数模块 np.random

函数功能描述返回值
np.random.rand(d0,d1,…,dn)元素在[0,1)区间均匀分布的数组浮点数
np.random.uniform(low,hige, size)元素在[low,hige)区间均匀分布的数组浮点数
numpy.random.randint(low,hige, size)元素在[low,hige)区间均匀分布的数组整数
np.random.randn(d0,d1,…,dn)产生标准正态分布的数组浮点数
np.random.normal(loc, scale, size)产生正态分布的数组浮点数
  • 因为是随机数,使用同样的语句,所得到的结果也是不同的。
np.random.rand(2,3)
array([[0.12616194, 0.44501057, 0.67152549],
       [0.75359755, 0.5818422 , 0.65866233]])
np.random.uniform(2,5,(4,3))
array([[2.54701723, 4.80398693, 2.33308575],
       [3.64370624, 3.59986233, 3.6292718 ],
       [2.20305486, 2.46791211, 4.91596931],
       [4.24011085, 4.70773334, 3.39320752]])
  • 伪随机数:由随机种子,根据一定的算法生成的。

  • 随机种子: 指定随机数生成时所用算法开始的整数值。

  • 如果使用相同的seed( )值,则每次生成的随即数都相同。

  • 如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。

  • 设置的seed()值仅一次有效。

  • 随机数产生的算法,和系统有关。

  • np.random.shuffle( 序列 )

  • 序列指Python列表、umPy数组等;

  • 对于多维数组,使用shuffle()函数只打乱第一维元素。

e = np.arange(12).reshape(3,4)
e
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
np.random.shuffle(e)
e
array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [ 0,  1,  2,  3]])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值