当前位置: 首页 > news >正文

机器学习2-NumPy

ndarray自动广播扩展维度,便于进行行列式,数组计算

# 自动广播机制,1维数组和2维数组相加# 二维数组维度 2x5
# array([[ 1,  2,  3,  4,  5],
#         [ 6,  7,  8,  9, 10]])
d = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
# c是一维数组,维度5
# array([ 4,  6,  8, 10, 12])
c = np.array([ 4,  6,  8, 10, 12])
e = d + c
e# 输出
array([[ 5, 8, 11, 14, 17], [10, 13, 16, 19, 22]])

创建ndarray

# 导入numpy
import numpy as np# 1、从list创建array 
a = [1,2,3,4,5,6]  # 创建简单的列表
b = np.array(a)    # 将列表转换为数组
b
# 输出
array([1, 2, 3, 4, 5, 6])# 2、arange:创建元素从0到10依次递增2的数组
# 通过np.arange创建
# 通过指定start, stop (不包括stop),interval来产生一个1维的ndarray
a = np.arange(0, 10, 2)
a
# 输出
array([0, 2, 4, 6, 8])# 3、zeros:创建指定长度或者形状的全0数组
a = np.zeros([3,3])
a
# 输出
array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])# 4、ones:创建指定长度或者形状的全1数组
a = np.ones([3,3])
a
# 输出
array([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]])

ndarray的属性包括shapedtypesizendim等,通过如下代码可以查看ndarray数组的属性。

  • shape:数组的形状 ndarray.shape,1维数组(N,)(N,),2维数组(M,N)(M,N),3维数组(M,N,K)3维数组(M,N,K)。
  • dtype:数组的数据类型。
  • size:数组中包含的元素个数ndarray.size,其大小等于各个维度的长度的乘积。
  • ndim:数组的维度大小ndarray.ndim, 其大小等于ndarray.shape所包含元素的个数。
a = np.ones([3, 3])
print('a, dtype: {}, shape: {}, size: {}, ndim: {}'.format(a.dtype, a.shape, a.size, a.ndim))
a, dtype: float64, shape: (3, 3), size: 9, ndim: 2

创建ndarray之后,可以对其数据类型或形状进行修改,代码实现如下:

# 转化数据类型
b = a.astype(np.int64)
print('b, dtype: {}, shape: {}'.format(b.dtype, b.shape))# 改变形状
c = a.reshape([1, 9])
print('c, dtype: {}, shape: {}'.format(c.dtype, c.shape))

数组间运算

# 数组 减去 数组, 用对应位置的元素相减
arr1 = np.array([[1., 2., 3.], [4., 5., 6.]])
arr2 = np.array([[11., 12., 13.], [21., 22., 23.]])
# 数组 乘以 数组,用对应位置的元素相乘
arr1 * arr2
array([[ 11., 24., 39.], [ 84., 110., 138.]])# 数组开根号,将每个位置的元素都开根号
arr ** 0.5
array([[1. , 1.41421356, 1.73205081], [2. , 2.23606798, 2.44948974]])

切片上的操作都会改变原数组,除非用np.copy创建新的内存空间

# 数组切片产生的新数组,还是指向原来的内存区域,数据不会被复制。
# 视图上的任何修改都会直接反映到源数组上。
a = np.arange(30)
arr_slice = a[4:7]
arr_slice[0] = 100
a, arr_slice
(array([ 0, 1, 2, 3, 100, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]), array([100, 5, 6]))# 通过copy给新数组创建不同的内存空间
a = np.arange(30)
arr_slice = a[4:7]
arr_slice = np.copy(arr_slice)
arr_slice[0] = 100
a, arr_slice
(array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]), array([100, 5, 6]))
  • mean:计算算术平均数,零长度数组的mean为NaN。
  • stdvar:计算标准差和方差,自由度可调(默认为n)。
  • sum :对数组中全部或某轴向的元素求和,零长度数组的sum为0。
  • maxmin:计算最大值和最小值。
  • argminargmax:分别为最大和最小元素的索引。
  • cumsum:计算所有元素的累加。
  • cumprod:计算所有元素的累积。

随机数np.random

# 可以多次运行,观察程序输出结果是否一致
# 如果不设置随机数种子,观察多次运行输出结果是否一致
np.random.seed(10)
a = np.random.rand(3, 3)
# 设置了随机数种子,每次输出都一样# 生成均匀分布随机数,随机数取值范围在[0, 1)之间
a = np.random.rand(3, 3)
a
array([[0.08833981, 0.68535982, 0.95339335], [0.00394827, 0.51219226, 0.81262096], [0.61252607, 0.72175532, 0.29187607]])# 生成均匀分布随机数,指定随机数取值范围和数组形状
a = np.random.uniform(low = -1.0, high = 1.0, size=(2,2))
a
array([[ 0.83554825, 0.42915157], [ 0.08508874, -0.7156599 ]])# 生成标准正态分布随机数
a = np.random.randn(3, 3)
a
array([[ 1.484537 , -1.07980489, -1.97772828], [-1.7433723 , 0.26607016, 2.38496733], [ 1.12369125, 1.67262221, 0.09914922]])# 生成正态分布随机数,指定均值loc和方差scale
a = np.random.normal(loc = 1.0, scale = 1.0, size = (3,3))
a
array([[2.39799638, 0.72875201, 1.61320418], [0.73268281, 0.45069099, 1.1327083 ], [0.52385799, 2.30847308, 1.19501328]])# 打乱数组顺序(只打乱第一维)
# 生成一维数组
a = np.arange(0, 30)
# 打乱一维数组顺序
np.random.shuffle(a)# 随机选取部分元素
a = np.arange(30)
b = np.random.choice(a, size=5)

线性代数

  • diag:以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)。
  • dot:矩阵乘法。
  • trace:计算对角线元素的和。
  • det:计算矩阵行列式。
  • eig:计算方阵的特征值和特征向量。
  • inv:计算方阵的逆。

文件读写

# 使用np.fromfile从文本文件'housing.data'读入数据
# 这里要设置参数sep = ' ',表示使用空白字符来分隔数据
# 空格或者回车都属于空白字符,读入的数据被转化成1维数组
d = np.fromfile('./work/housing.data', sep = ' ')# save & load
# 产生随机数组a
a = np.random.rand(3,3)
np.save('a.npy', a)# 从磁盘文件'a.npy'读入数组
b = np.load('a.npy')

np.exp(x) --计算x的指数值


http://www.mrgr.cn/news/81376.html

相关文章:

  • Meta如何用极致技术实现接近完美的缓存一致性?
  • 如何在 QGIS 中打开 Esri 文件地理数据库(GDB)
  • 网页生成鸿蒙App
  • MFC/C++学习系列之简单记录13
  • c# 实现一个简单的异常日志记录(异常迭代+分片+定时清理)+AOP Rougamo全局注入
  • Rust使用国内源加速在线安装开发环境搭建
  • 使用RabbitMQ
  • ABAP开发-权限控制
  • I.MX6U 启动方式详解
  • 解读1:TwinLiteNet论文中基础模块及其他相关模块总结
  • Centos7.9安装openldap+phpldapadmin+grafana配置LDAP登录最详细步骤 亲测100%能行
  • 基于ceres优化的3d激光雷达开源算法
  • EMS从0到1之数据采集
  • Issac ROS navigation测试
  • Vivado 编译(单核性能对比+高性能迷你主机+Ubuntu20.04/22.04安装与区别+20.04使用远程命令)
  • 【MySQL基础篇】多表查询(隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询)
  • 如何更好的进行时间管理
  • Python 自动化 打开网站 填表登陆 例子
  • OpenEuler 22.03 安装 flink-1.17.2 集群
  • 重温设计模式--1、组合模式
  • Linux服务器pm2 运行chatgpt-on-wechat,搭建微信群ai机器人
  • mysql,数据库主从同步搭建
  • 【Unity3D】Particle粒子特效或3D物体显示在UGUI上的方案
  • [搜广推]王树森推荐系统笔记——曝光过滤 Bloom Filter
  • tcp 的三次握手与四次挥手
  • mysql数据库面试核心概念