三、机器学习基础知识:Python常用机器学习库(Numpy第二部分)

news2024/11/20 2:35:43

文章目录

  • 5、其他创建数组的方式
    • 5.1 空数组
    • 5.2 全零数组
    • 5.3 全一数组
    • 5.4 数列
    • 5.5 随机数组
    • 5.6 数组转换
  • 6、索引、切片和迭代
  • 7、Numpy计算
    • 7.1 基本数组运算
    • 7.2 条件运算
    • 7.3 统计运算
  • 8、Numpy存取文件

前序内容:
三、机器学习基础知识:Python常用机器学习库(Numpy第一部分)

5、其他创建数组的方式

除了前面所述使用array函数构造数组外,还可以使用其他几种方式来构造特殊形式的数组。

5.1 空数组

Numpy的empty()函数可以创建一个指定形状、数据类型的空数组,该数组内容为空。创建的语法格式如下:

numpy.empty(shape,dtype=None,order=None)

其中shape表示数组形状;dtype表示数据类型,可选项;order有’C’和’F’两个选项,分别代表行优先和列优先,表示在计算机内存中存储元素的顺序,可选项。
创建一个空数组:

import numpy as np
x = np.empty([2,2],dtype = int)
print(x)

在这里插入图片描述

运行后得到的数组元素值是不确定的,因为所用空间未初始化。

5.2 全零数组

Numpy的zero()函数可以创建全部用0填充的数组。创建的语法格式如下:

numpy.zeros(shape,dtype=None,order=None)

其中shape表示数组形状;dtype表示数据类型,为可选项;order有’C’和’F’两个选项,分别代表行优先和列优先。
创建一个全零数组:

x = np.zeros([2,2],dtype = int)
print(x)

在这里插入图片描述

5.3 全一数组

Numpy的ones()函数可以创建全部用1填充的数组。创建的语法格式如下:

numpy.ones(shape,dtype=None,order=None)

其中shape表示数组形状;dtype表示数据类型,为可选项;order有’C’和’F’两个选项,分别代表行优先和列优先。
创建一个全一数组:

x = np.ones(2)
print(x)
y = np.ones([2,2],dtype = int)
print(y)

在这里插入图片描述

5.4 数列

如果需要创建一个包含简单数列的数组,可以使用Numpy中的arange()函数、linspace()函数。
arange()函数的功能和Python的range()函数功能类似,在start到stop的范围内,生成一个ndarray数组,其语法格式如下:

numpy.arange([start],stop[,step],dtype=None)

使用arange()函数创建包含序列的数组:

#生成1~5之间,步长为0.5的一维数组
arr1 = np.arange(1,5,0.5)
print(arr1)

在这里插入图片描述

linspace()函数与arange()函数的功能相似,也是在指定范围内生成均匀分布的数值序列,其语法格式如下:

numpy.linspace(start,stop,num,endpoint=True,dtype=None)

其中start,stop分别表示起始数和终止数,num表示元素个数,endpoint决定终止值是否包含在创建的数组中,dtype表示数据类型,后三个参数均为可选项。
使用linspace()函数创建包含序列的数组:

#生成1~5之间,元素总数为10的一维数组
arr2 = np.linspace(1,5,10)
print(arr2)

在这里插入图片描述

5.5 随机数组

在Numpy的random模块中还提供了随机函数用于随机数组的创建,常见的随机函数如下:

函数作用
rand()随机产生指定维度的0到1之间的浮点数组
randiant(low,high,size)随机生成[low,high]之间的整数数组,大小为size
random(size)随机生成[0,1)之间的浮点数数组,大小为size
uniform(start.end,size)随机生成[start,end)之间均匀分布的浮点数数组,大小为size
normal(loc,scale,size)随机生成符合均值为loc,方差为scale的正态分布下的浮点数组,大小为size

创建随机数组:

arr1 = np.random.rand(2,2) #随机产生形状为(2,2)的0到1之间的浮点数组
arr2 = np.random.randint(0,5,(2,2)) #随机生成[0,5]之间的整数数组,大小为(2,2)
arr3 = np.random.random((2,3)) #随机生成[0,1)之间的浮点数数组,大小为(2,3)
arr4 = np.random.uniform(0,5,(2,2)) #随机生成[0,5)之间均匀分布的浮点数数组,大小为(2,2)
arr5 = np.random.normal(1,1,(2,2))  #随机生成符合均值为1,方差为1的正态分布下的浮点数组,大小为(2,2)
print("生成的arr1:\n",arr1)
print("生成的arr2:\n",arr2)
print("生成的arr3:\n",arr3)
print("生成的arr4:\n",arr4)
print("生成的arr5:\n",arr5)

在这里插入图片描述

5.6 数组转换

Numpy中的array()函数可以将常见的数值序列,如List和Tuple转换为ndarray数组。
转换实例:

data1 = [1,2,3,4,5]
data2 = (1,2,3,4,5)
print(type(data1))
print(type(data2))
arr1 = np.array(data1) #list转换为array
arr2 = np.array(data2) #tuple换为array
print(type(arr1))
print(type(arr2))

在这里插入图片描述

6、索引、切片和迭代

切片是指取数据序列对象的一部分的操作,前面介绍过字符串、列表、元组都支持切片语法。ndarray数组与其他数据序列类似,也可以通过对数据位置下标进行索引,从而实现切片和迭代。
对ndarray进行切片操作与一维数组相同,用索引标记切片的起始和终止位置即可。因为ndarray可以是多维数组,在进行切片时,通常需要设定每个维度上的切片位置。
对数组进行切片操作:

arr1 = np.arange(12).reshape(3,4) #生成取值为0~11,形状为(3,4)的数组
print("arr1:\n",arr1)
arr2 = arr1[1:,2:] #截取第2行到最后1行,第3列到最后1列的元素生成一个新数组
print("arr2:\n",arr2)

在这里插入图片描述

NumPy还提供了一个copy()方法,可以根据现有的ndarray数组来创建新的ndarray数组。使用 copy()方法与切片可以用原数组的一部分生成新数组。
copy()方法的使用:

arr1 = np.arange(12).reshape(3,4) #生成取值为0~11,形状为(3,4)的数组
print("arr1:\n",arr1)
arr2 = np.copy(arr1[1:,0:3]) #切片复制arr1的第2行到最后1行,第1列到第3列的元素生成一个新数组
print("arr2:\n",arr2)

在这里插入图片描述

与其他数据序列类似,ndarray 也可以通过 for 循环实现迭代。当维数多于一维时,迭代操作使用嵌套的for循环。选代时,通常按照第一条轴(默认为行)对二维数组进行扫描。如果需要按其他维度迭代,可以使用apply_along_axis(func,axis,arr)函数指定当前处理的轴。
嵌套的for 循环进行数组迭代遍历:

arr1 = np.arange(12).reshape(3,4) #生成取值为0~11,形状为(3,4)的数组
for x in arr1: #依次对行进行遍历
    for y in x:  #依次对列进行遍历
        print(y,end = ' ')

在这里插入图片描述

此外,NumPy还包含一个循环迭代器类numpy.nditer,所生成的迭代器(Iterator)对象是一个根据位置进行遍历的对象。这是一个有效的多维迭代器对象,与Python内置的iter()函数类似,每个数组元素可使用选代器对象来访问,即逐个访问数组中的元素。该方法迭代的顺序与数组的内容布局相匹配,不受数据排序的影响,哪怕对数组进行装置操作,虽然数据的显示顺序发生了变化,但是不影响迭代的顺序。
nditer对象进行数组迭代遍历:

arr1 = np.arange(12).reshape(3,4) #生成取值为0~11,形状为(3,4)的数组
print(arr1)
for x in np.nditer(arr1):
    print(x,end = ' ')
arr2 = arr1.T #对arr1进行装置
print("\n",arr2)
for x in np.nditer(arr2):
    print(x,end = ' ')

在这里插入图片描述

如果需要特定的顺序,可以使用显示参数来强制nditer对象使用某种顺序,nditer对象提供了一个order参数来控制迭代顺序。其参数order有三个可选参数:K,C,F,K为默认方式逐个读取,C为行序优先,F为列序优先。
访问顺序的调整:

arr1 = np.arange(12).reshape(3,4) #生成取值为0~11,形状为(3,4)的数组
print(arr1)
print("行优先遍历的顺序")
for x in np.nditer(arr1,order = 'C'):
    print(x,end = ' ')
print("\n列优先遍历的顺序")
for x in np.nditer(arr1,order = 'F'):
    print(x,end = ' ')

在这里插入图片描述

7、Numpy计算

Numpy中的ndarray可以直接进行基本运算,包括基本数组运算、条件运算以及统计运算。

7.1 基本数组运算

基本数组运算主要是指两个形状一致或“形状兼容”的数组之间可以进行加减乘除的计算过程。
相同形状的数组运算:

arr1 = arr2 = np.ones((2,3),dtype = int)
print(arr1+arr2) #求和
print(arr1-arr2) #求差
print(arr1*arr2) #求积
print(arr1/arr2) #求商

在这里插入图片描述

形状兼容的数组运算:

arr3 = np.ones((2,3),dtype = int)
print(arr3)
arr4 = np.arange(3)
print(arr4)
print(arr3+arr4) #求和

在这里插入图片描述

上述代码中arr4会对arr3进行广播计算,即arr4数组会对arr3数组中的每一行都做加法运算,而进行这种广播计算的前提是arr4的形状和arr3的形状要兼容,如arr4的形状是23,arr3的形状是13,它们在列方向上是一致的。
此外数组和普通数值之间也可以进行运算,它们之间执行广播运算,也就是普通值会与数组的每个元素进行相应的运算。
数组与普通数值的运算:

arr5 = np.ones((2,3),dtype = int)
print(arr5+1)
print(arr5*3)

在这里插入图片描述

7.2 条件运算

Numpy中基本的条件运算主要是指进行大小的比较,若比较的条件为真,返回True,否则返回False。
简单条件运算:

arr1 = np.arange(12).reshape(3,4) #生成取值为0~11,形状为(3,4)的数组
print(arr1)
arr2 = [arr1>5]  #arr1中的元素大于5返回True,否则返回False
print(arr2)

在这里插入图片描述

另外可以使用where()函数实现查找筛选操作,其语法格式如下:

where(condition,x if true,y if false)

该语句根据condition的结果对数组的每个元素进行比较,之后返回特定数组,当条件为真时,返回x,条件为假时返回y。
where()函数的使用:

arr1 = np.arange(12).reshape(3,4) #生成取值为0~11,形状为(3,4)的数组
print(arr1)
arr2 = np.where(arr1>5,1,0) #arr1中的元素大于5返回1,否则返回0
print(arr2)

在这里插入图片描述

7.3 统计运算

常见的统计运算函数如下:

函数作用
argmax()获取最大值索引
argmin()获取最小值索引
cumsum()从第一个元素开始进行累加各元素并返回每个累加结果
max()求最大值
min()求最小值
mean()求算术平均值
std()求数组元素在给定轴上的标准偏差
sum()求和

统计运算实例:

arr1 = np.arange(12).reshape(3,4) #生成取值为0~11,形状为(3,4)的数组
print("原始数组为:\n",arr1)
r1 = np.argmax(arr1) #求最大值索引
print("最大值索引为:",r1) 
r2 = np.argmin(arr1) #求最小值索引
print("最小值索引为:",r2)
r3 = np.cumsum(arr1) #求第一个元素开始的累加值并返回
print("元素累加值为:",r3)
r4 = np.max(arr1,axis=0) #求每列的最大值
print("每列最大值为:",r4)
r5 = np.mean(arr1,axis=0) #求每列的平均值
print("每列平均值为:",r5)
r6 = np.min(arr1,axis=1) #求每行的最小值
print("每行最小值为:",r6)
r7 = np.std(arr1,axis=1) #求每行的标准差
print("每行标准差为:",r7)
r8 = np.sum(arr1) #求和
print("元素之和为:",r8)

在这里插入图片描述

8、Numpy存取文件

Numpy提供了如下表所示的三种文件读写函数。

读函数写函数作用
fromfile()tofile()存取二进制格式文件
load()save()存取Numpy专用的二进制格式文件
loadtxt()savetxt()存取文本文件,也可以访问CSV文件

上述三种方法中,最常用的是第三种函数方法,即loadtxt()和savetxt(),它们在存取过程中,使用的是Numpy内置的一维和二维数组格式。它们的语法格式如下:

np.loadtxt(fname, dtype=,  delimiter=None)
np.savetxt(fname, X, fmt= '%.18e', delimiter='')

参数释义:
fname:文件、字符串或产生器,可以是.gz或.bz2压缩文件。
X:准备存储到文件中的数据,一维或二维数组形式。
dtype:数据类型,可选。
fmt:格式字符串,缺省时为’%.18e’。
delimiter: 分隔字符串,默认是空格。
使用loadtxt()和savetxt()进行文件操作:

data = np.arange(0,50,5)
print(data)
np.savetxt('data.txt',data,delimiter=',')
data2 = np.loadtxt('data.txt',dtype=np.str_)
print(data2)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1098951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习】【Opencv】【GPU】python/C++调用onnx模型【基础】

【深度学习】【Opencv】【GPU】python/C调用onnx模型【基础】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【Opencv】【GPU】python/C调用onnx模型【基础】前言Python版本OpenCVWindows平台安装OpenCVopencv调用onnx模型 C版本…

视频怎么压缩?视频太大这样处理变小

在当今时代,视频已经成为了我们日常生活中不可或缺的一部分,然而,视频文件往往非常大,给我们的存储和传输带来了很大的不便,那么,如何有效地压缩视频呢? 一、使用压缩软件 首先我们给大家分享一…

免费下载IEEE标准的途径

工作需要,找出了一种方法 下载 访问ieeexplore,搜索待下载标准,如图 找到自己要下载的标准,点开链接,复制doi,如图 访问scihub,找1个可用连接,搜索doi,下载 查标准是否…

【机器学习】PyTorch-MNIST-手写字识别

文章目录 前言完成效果一、下载数据集手动下载代码下载MNIST数据集: 二、 展示图片三、DataLoader数据加载器四、搭建神经网络五、 训练和测试第一次运行: 六、优化模型第二次优化后运行: 七、完整代码八、手写板实现输入识别功能 前言 注意…

Cesium Vue(一)— 项目初始化配置

1. 创建VUE项目工程 创建项目 vue create cesium-vue配置Vue3 2. 创建vue.config.js文件 const { defineConfig } require(vue/cli-service)// The path to the CesiumJS source code const cesiumSource node_modules/cesium/Source; const cesiumWorkers ../Build/C…

Elasticsearch:什么是大语言模型 (LLMs)?

假设你想参加流行的游戏节目 Jeopardy(这是一个美国电视游戏节目,参赛者将获得答案并必须猜测问题)。 要参加演出,你需要了解任何事情的一切。 所以你决定在接下来的三年里每天都花时间阅读互联网上的所有内容。 你很快就会意识到…

跨境电商:为民营经济注入新活力

中国的民营经济一直以来都是国家经济发展的中流砥柱,而近年来,跨境电商产业崭露头角,为民营经济注入了新的活力和机遇。本文将探讨跨境电商如何成为中国民营企业的助推引擎,以及其对民营经济的积极影响。 民营经济的支柱地位 中国…

elasticsearch (六)filebeat 安装学习

filebeat 安装:文件节拍快速入门:安装和配置 |文件节拍参考 [7.17] |弹性的 (elastic.co) 解压缩后,以配置nginx日志为例。 Nginx module | Filebeat Reference [7.17] | Elastic filebeat 配置中, - module: nginx access: …

私人服务器可以干嘛

目录 搭建个人网站或博客: 远程桌面: 作为网盘储存: 作为测试和学习环境: 推广产品: 游戏私服(注意,仅限于个人自己单机玩): 个人服务器可以用于多种用途,以下是一些常见的用途:…

解密zkLogin:探索前沿的Sui身份验证解决方案

由于钱包复杂性导致的新用户入门障碍是区块链中一个长期存在的问题,而zkLogin是其简单的解决方案。通过使用前沿的密码学和技术,zkLogin既优雅又复杂。本文深入探讨了zkLogin的工作原理,涵盖了用户和开发者的安全性方面,并解释了S…

44.日期交叉问题(品牌活动天数计算)

思路分析: (1)计算表中每一条数据所对应的活动天数days (2)使用posexplode函数对days炸裂求其索引值index (3)使用开始日期index补全后面每一个活动日期in_date (4)按品牌…

Jmeter实现一次登录,多次业务请求(不同线程组间共享cookie和变量)

实现目的 很多时候,在进行性能测试时,需要先登录,然后再对需求的事务进行相关性能测试,此时的登录操作,并不在本次性能测试的范围内,所以我们只需要登录一次,然后获取登录成功后的cookie等&…

回顾 | E³CI效能认知与改进论坛,助力企业研发效能度量和提升

2023年8月,TiD质量竞争力大会组委会和ECI专家委员会成功举办TiD大时段课程“度量驱动研发效能提升”与“ECI效能认知与改进论坛”。与会专家以《ECI软件研发效能度量规范》团体标准为要点,为企业研发效能度量和提升分享诸多实践成果与经验。 《ECI软件研…

浅析ArkTS的起源和演进

1 引言 Mozilla创造了JS,Microsoft创建了TS,Huawei进一步推出了ArkTS。 从最初的基础的逻辑交互能力,到具备类型系统的高效工程开发能力,再到融合声明式UI、多维状态管理等丰富的应用开发能力,共同组成了相关的演进脉…

二十六、【颜色调整】

文章目录 1、色相/饱和度2、色彩平衡3、曲线4、可选颜色 1、色相/饱和度 色相其实就是颜色的亮度,就是我们往颜色里边加白色,白色越多颜色越淡。饱和度就是我们往颜色里边加黑色,黑色越多颜色越浓。如下图,我们调整拾色器里边的颜…

NAT网关在阿里云的应用

NAT网关(Network Address Translation Gateway)是一种网络地址转换服务,提供NAT代理(SNAT和DNAT)能力。NAT是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决I…

408计算机组成原理需要背的部分

1.第一章 1.1计算机发展历程 1.发展历程:电子管-》晶体管-》中小规模集成电路-》超大规模集成电路 2.系统组成:控制器,运算器,存储器,输入设备,输出设备 3.性能指标(常考部分): 机器字长&#x…

橙河网络:怎么学习python?

大家好,我是橙河网络,今天聊一聊怎么学习python? 学习Python编程可以采取以下步骤: 1.理解Python基础知识:了解Python的基本语法、数据类型、控制流语句、函数、模块和包等基础知识,这些是Python编程的基…

【LeetCode刷题(数据结构与算法面试题)】:最小高度树

给定一个有序整数数组 元素各不相同且按升序排列 编写一个算法 创建一棵高度最小的二叉搜索树 示例: 给定有序数组: [-10,-3,0,5,9] 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树 0 / \ -3 9 / / -10 5 确定最小高…

股票价格预测 | Python基于RNN股票预测实战

循环神经网络(RNN)是基于序列数据(如语言、语音、时间序列)的递归性质而设计的,是一种反馈类型的神经网络,其结构包含环和自重复,因此被称为“循环”。它专门用于处理序列数据,如逐字生成文本或预测时间序列数据(例如股票价格)。 (1)one to one:其实和全连接神经网络…