机器学习数据处理

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。


NumPy

    • 什么是NumPy
    • ndarray对象
    • 安装NumPy
    • NumPy基本操作
    • NumPy运算操作
    • NumPy矩阵操作
    • 图书推荐


专栏:《机器学习》


什么是NumPy

NumPy 是 Numerical Python 的缩写,它是一个由多维数组对象(ndarray)和处理这些数组的函数(function)集合组成的库。使用 NumPy 库,可以对数组执行数学运算和相关逻辑运算。NumPy 不仅作为 Python 的扩展包,它同样也是 Python 科学计算的基础包。NumPy 提供了大量的数学函数,主要用来计算、处理一维或多维数组,支持常见的数组和矩阵操作。NumPy 的底层主要用 C语言编写,因此它能够高速地执行数值计算。NumPy 还提供了多种数据结构,这些数据结构能够非常契合的应用在数组和矩阵的运算上。
在这里插入图片描述
NumPy 作为一个开源项目,它由许多协作者共同开发维护,随着数据科学(Data Science,简称 DS,包括大数据分析与处理、大数据存储、数据抓取等分支)的蓬勃发展,像 NumPy、SciPy(Python科学计算库)、Pandas(基于NumPy的数据处理库) 等数据分析库都有了大量的增长,它们都具有较简单的语法格式。NumPy 通常会和Matplotlib等搭配一块使用。

NumPy主要有以下优势
①ndarray支持并行化运算(向量化运算)
numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算。
②效率远高于纯Python代码
Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码。
③ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就使得批量操作数组元素时速度更快。
在这里插入图片描述

ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生list就只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。

ndarray对象

NumPy 定义了一个 n 维数组对象,简称 ndarray 对象,它是一个一系列相同类型元素组成的数组集合。数组中的每个元素都占有大小相同的内存块,使用索引或切片的方式可以获取数组中的每个元素。ndarray 对象有一个 dtype 属性,该属性用来描述元素的数据类型。ndarray 对象采用了数组的索引机制,将数组中的每个元素映射到内存块上,并且按照一定的布局对内存块进行排列,常用的布局方式有两种,即按行或者按列。

创建ndarray对象
通过 NumPy 的内置函数 array() 可以创建 ndarray 对象,其语法格式如下:

numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0)

使用NumPy创建数组

import numpy as np

a = np.array([1,2,3])
b = np.array([[1,2,3], [4,5,6]])

print(a)
print(type(a))

print(b)

运行结果如下
在这里插入图片描述
查看数组维数并变维

import numpy as np

a = np.array([[1,2], [3,4], [5,6]])

print(a.ndim)
print("原数组", a)

a = a.reshape(2,3)
print("新数组", a.ndim, a)

运行结果如下
在这里插入图片描述

ndarray的属性
ndarray的属性如下在这里插入图片描述
通过ndarray的属性也可以操作数组

import numpy as np

a = np.array([[1,2], [3,4], [5,6]])

#输出a的维度
print(a.shape)
print(a)

#改变a的维度
a.shape = (2, 3)
print(a)

#通过函数改变a的维度
print(a.reshape(3, 2))

#打印数组维数
print(a.ndim)

#以字节为单位输出数组中每个元素的大小
print(a.itemsize)

#输出数组的内存信息
print(a.flags)

打印结果如下
在这里插入图片描述

ndarray的类型
ndarray的类型包括
在这里插入图片描述
NumPy中的数据类型标识码,NumPy 中每种数据类型都有一个唯一标识的字符码,如下所示:
在这里插入图片描述

安装NumPy

Windows安装NumPy
最简单的方式是通过包管理器pip命令安装

pip install numpy  

通常,NumPy 与 SciPy 程序包一起使用,SciPy 可以看做对 NumPy 库的扩展,它在 NumPy 的基础上又增加了许多工程计算函数。(此处暂且只讲解安装NumPy)

在这里插入图片描述

Linux安装NumPy
本人使用的Linux版本为CentOS,运行如下命令即可

$ sudo yum install numpy scipy python-matplotlib ipython python-pandas sympy python-nose

NumPy基本操作

numpy.empty()
numpy.empty() 创建未初始化的数组,可以指定创建数组的形状(shape)和数据类型(dtype)。

numpy.empty(shape, dtype = float, order = 'C')

参数:

  • shape:指定数组的形状;
  • dtype:数组元素的数据类型,默认值是值 float;
  • order:指数组元素在计算机内存中的储存顺序,默认顺序是“C”(“C”代表以行顺序存储,“F”则表示以列顺序存储)。

numpy.zeros()
该函数用来创建元素均为 0 的数组,同时还可以指定被数组的形状。

numpy. zeros(shape,dtype=float,order="C")

参数:

  • shape:指定数组的形状;
  • dtype:数组元素的数据类型,默认值是值 float;
  • order:指数组元素在计算机内存中的储存顺序,默认顺序是“C”(“C”代表以行顺序存储,“F”则表示以列顺序存储)。

numpy.ones()
返回指定形状大小与数据类型的新数组,并且新数组中每项元素均用 1 填充。

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

numpy.asarray()
asarray() 能够将一个 Python 序列转化为 ndarray 对象。

numpy.asarray(sequence,dtype = None ,order = None

参数:

  • sequence:接受一个 Python 序列,可以是列表或者元组;
  • dtype:可选参数,数组的数据类型,默认值是值 float;
  • order:指数组元素在计算机内存中的储存顺序,默认顺序是“C”(“C”代表以行顺序存储,“F”则表示以列顺序存储)。

numpy.frombuffer()
表示使用指定的缓冲区创建数组。

numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)

参数:

  • buffer:将任意对象转换为流的形式读入缓冲区;
  • dtype:返回数组的数据类型,默认是 float32;
  • count:要读取的数据数量,默认为 -1 表示读取所有数据;
  • offset:读取数据的起始位置,默认为 0。

numpy.fromiter()
把迭代对象转换为 ndarray 数组,其返回值是一个一维数组。

numpy.fromiter(iterable, dtype, count = -1)

参数:

  • iterable:可迭代对象;
  • dtype:数组元素的数据类型,默认值是值 float;
  • count:读取的数据数量,默认为 -1,读取所有数据。

numpy.arange()
创建给定数值范围的数组。

numpy.arange(start, stop, step, dtype)

参数:

  • start: 起始值,默认是 0。
  • stop: 终止值,注意生成的数组元素值不包含终止值。
  • step: 步长,默认为 1。
  • dtype: 可选参数,指定 ndarray 数组的数据类型。

numpy.linspace()
表示在指定的数值区间内,返回均匀间隔的一维等差数组,默认均分 50 份。

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

参数:

  • start:代表数值区间的起始值;
  • stop:代表数值区间的终止值;
  • num:表示数值区间内要生成多少个均匀的样本。默认值为 50;
  • endpoint:默认为 True,表示数列包含 stop 终止值,反之不包含;
  • retstep:默认为 True,表示生成的数组中会显示公差项,反之不显示;
  • dtype:代表数组元素值的数据类型。

numpy.logspace()
创建等比数组,返回一个 ndarray 数组。

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

参数:

  • start: 序列的起始值:base**start。
  • stop: 序列的终止值:base**stop。
  • num: 数值范围区间内样本数量,默认为 50。
  • endpoint: 默认为 True 包含终止值,反之不包含。
  • base: 对数函数的 log 底数,默认为10。
  • dtype: 可选参数,指定 ndarray 数组的数据类型。

NumPy运算操作

numpy.ndarray.flat()
numpy.ndarray.flat() 返回一个数组迭代器,可以用 for 循环遍历其中的每一个元素。

import numpy as np

a = np.arange(8).reshape(2, 4)

print (a)

for e in a.flat:
    print (e, end=" ")

在这里插入图片描述
numpy.ndarray.flatten()
以一维数组的形式返回一份数组副本,对副本修改不会影响原始数组。

import numpy as np

a = np.arange(8).reshape(2, 4)

print (a)
print(a.flatten())

在这里插入图片描述
numpy.ravel()
返回一个连续的扁平数组(即展开的一维数组),与 flatten不同,它返回的是数组视图(修改视图会影响原数组)。

NumPy 的位运算
在这里插入图片描述
算术运算
NumPy 数组的“加减乘除”算术运算,分别对应 add()、subtract()、multiple() 以及 divide() 函数。
numpy.reciprocal()函数对数组中的每个元素取倒数,并以数组的形式将它们返回。
numpy.power()将 a 数组中的元素作为底数,把 b 数组中与 a 相对应的元素作幂 ,最后以数组形式返回两者的计算结果。
numpy.mod()返回两个数组相对应位置上元素相除后的余数

NumPy矩阵操作

Matrix矩阵库
NumPy 提供了一个 矩阵库模块numpy.matlib,该模块中的函数返回的是一个 matrix 对象,而非 ndarray 对象。矩阵由 m 行 n 列(m*n)元素排列而成,矩阵中的元素可以是数字、符号或数学公式等。
matlib.empty() 返回一个空矩阵,它的创建速度非常快。
numpy.matlib.zeros() 创建一个以 0 填充的矩阵。
numpy.matlib.ones() 创建一个以 1 填充的矩阵。
numpy.matlib.eye() 返回一个对角线元素为 1,而其他元素为 0 的矩阵 。
numpy.matlib.identity()该函数返回一个给定大小的单位矩阵,矩阵的对角线元素为 1,而其他元素均为 0。
numpy.matlib.rand() 创建一个以随机数填充,并给定维度的矩阵。

multiple()
函数用于两个矩阵的逐元素乘法。

import numpy as np

a1=np.array([[1,2], [3,4]], ndmin=2)

a2=np.array([[1,2], [3,4]], ndmin=2)

print(np.multiply(a1, a2))

在这里插入图片描述
matmul()
用于计算两个数组的矩阵乘积。

import numpy as np

a1=np.array([[1,2], [3,4]], ndmin=2)

a2=np.array([[1,2], [3,4]], ndmin=2)

print(np.matmul(a1, a2))

在这里插入图片描述
dot()
函数用于计算两个矩阵的点积。

import numpy as np

a1=np.array([[1,2], [3,4]], ndmin=2)

a2=np.array([[1,2], [3,4]], ndmin=2)

print(np.dot(a1, a2))

在这里插入图片描述
numpy.inner()
用于计算数组之间的内积。
numpy.linalg.solve()
该函数用于求解线性矩阵方程组,并以矩阵的形式表示线性方程的解。
numpy.linalg.inv()
该函数用于计算矩阵的逆矩阵,逆矩阵与原矩阵相乘得到单位矩阵。

图书推荐

🔥通用人工智能:初心与未来

自20世纪50年代图灵在其划时代论文《计算机器与智能》中提出“图灵测试”以及之后的达特茅斯研讨会开始,用机器来模仿人类学习及其他方面的智能,即实现“人工智能”(Artificial Intelligence,AI)便成为计算机领域持续的研究热点。达特茅斯会议指出,“人工智能”的研究目标是实现能模拟人类的机器,该机器能使用语言,具有概念抽象和理解能力,能够完成人类才能完成的任务并能不断提高自身能力。当时的主要“智能”议题包括自动计算机、自然语言处理、神经网络、计算理论、自我改造、抽象、随机性和创造性等方面。这可以说是人工智能发展的“初心”,也是一项雄心勃勃的科学目标。
“人工智能”概念被提出后,在过去60多年里得到了广泛关注并迅速成长为学科前沿,进而沿着“从符号主义走向连接主义”和“从逻辑走向知识”两个方向蓬勃发展。时至今日,以深度学习为代表的新一波人工智能正在兴起。自然语言处理、人脸识别、自动驾驶、无人系统等复杂人工智能任务相继取得大的突破,人工智能在很多特定问题(如围棋、《星际争霸》游戏、医疗诊断等)的解决上甚至超过了人类的水平。这也引起了新的担忧,有些人认为人工智能将很快取代人类,人类的发展在不远的将来会面临极大挑战(机器人世界末日将会到来)。
下面推荐一本书,该书尝试给人们一个新的视角,即尽管人工智能已经变得越来越复杂而强大,但计算机科学还远未创造出通用人工智能(General AI)。作者结合人类自然智能的认知机理以及人工智能发展的初心与使命,带我们从不同方面细致分析了当前人工智能技术的不足,以及从当前“专用人工智能”到实现真正的“通用人工智能”还需要在哪些方面取得突破。书中对当前人工智能技术的发展路径提出了不少质疑,也给出了新的发展导向,如“通用智能不是算法优化”“自然智能会抄捷径”“通用智能需要富有洞察力的思考”“机器创造力需要创新的表示能力”“从少量例子中学习的能力”“全脑仿真智能”等,这将为通用人工智能的演化路径带来新的思考和借鉴。

书名:《通用人工智能:初心与未来》
作者:赫伯特·L.罗埃布莱特(Herbert L. Roitblat)
译者:郭斌
出版社:机械工业出版社在这里插入图片描述
内容简介:至少从 20 世纪 50 年代起,人们就开始大肆宣传可能很快就会创造出一种能够与人类智能的全部范围和水平相匹配的机器。现在,我们已经成功地创造出了能够解决特定问题的机器,其准确度达到甚至超过了人类,但我们仍然无法获得通用智能。这本书想和大家探讨一下还需要做什么样的努力才能不仅获得专用智能,还能获得通用智能。如果读者对智能感兴趣,想了解更多关于如何建造自主机器的知识,或者担心这些机器突然有一天会以一种被称为“技术奇点”的方式统治世界,请阅读本书。
通过阅读本书,读者将会了解到:

  • 尽管人工智能已经变得越来越复杂而强大,但计算机科学还远未创造出通用人工智能 。
    人类自然智能的认知机理以及人工智能发展的初心与使命,从不同方面认知当前人工智能技术的不足。
  • 从当前“专用人工智能”到实现真正的“通用人工智能”还需要在哪些方面取得突破。
  • 机器智能的进步可能会改变人们从事的工作类型,但它们不会意味着人类存在的终结。
  • 为什么机器智能的改进并不会导致由机器所主导的失控性革命,机器智能的进步并不会导致世界末日的到来。

在这里插入图片描述
在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端重置密码报错记录

昨天晚上,我写了重置密码的前端,测试的时候报错 今天上午,我继续试图解决这个问题,我仔细检查了一遍,前端没有问题 可以正常接收输入的数据并且提交 但是后端接收到的数据为空,后端接口也没有问题 但后端收…

Sqoop与其他数据采集工具的比较分析

比较Sqoop与其他数据采集工具是一个重要的话题,因为不同的工具在不同的情况下可能更适合。在本博客文章中,将深入比较Sqoop与其他数据采集工具,提供详细的示例代码和全面的内容,以帮助大家更好地了解它们之间的差异和优劣势。 Sq…

openssl3.2 - 官方demo学习 - cms - cms_ver.c

文章目录 openssl3.2 - 官方demo学习 - cms - cms_ver.c概述运行结果笔记END openssl3.2 - 官方demo学习 - cms - cms_ver.c 概述 CMS验签, 将单独签名和联合签名出来的签名文件都试试. 验签成功后, 将签名数据明文写入了文件供查看. 也就是说, 只有验签成功后, 才能看到签名…

解决JuPyter500:Internal Server Error问题

目录 一、问题描述 二、问题分析 三、解决方法 四、参考文章 一、问题描述 在启动Anaconda Prompt后,通过cd到项目文件夹启动Jupyter NoteBook点击.ipynb文件发生500报错。 二、问题分析 base环境下输入指令: jupyter --version 发现jupyter环境…

WebGL在虚拟现实(VR)的应用

WebGL在虚拟现实(VR)领域的应用日益增多,它为在Web浏览器中创建交互式的虚拟现实体验提供了强大的支持。以下是一些WebGL在VR领域的应用示例,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司&am…

Open3D 点云等比例缩放(20)

Open3D 点云等比例缩放(20) 一、算法介绍二、算法实现1.代码世人慌慌张张,不过图碎银几两, 偏偏这碎银几两,能解世间万种慌张。 一、算法介绍 实现这样一个功能,沿着中心,按照指定的比例,比如1/2,缩小或者放大点云,保存到新的文件中 二、算法实现 1.代码 import…

网络安全技术新手入门:在docker上安装dvwa靶场

前言 准备工作:1.已经安装好kali linux 步骤总览:1.安装好docker 2.拖取镜像,安装dvwa 一、安装docker 输入命令:sudo su 输入命令:curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key …

C语言辨析——深入理解格式字符的用法

1. 问题 下面程序为什么的输出结果为什么不是25而是0&#xff1f;问题出在哪&#xff1f; #include <stdio.h> #include <math.h> int main() {int a3,b4; printf("%d\n",pow(a,2)pow(b,2)); return 0; } 2. 分析 函数pow的返回类型是double&…

大学期末考前复习卷(上)

第一题&#xff1a; 泰勒展开式求sin(x) 【问题描述】 已知sin(x)的泰勒展开式为&#xff1a; sin(x) x/1! - x^3/3! x^5/5! - x^7/7! …… 当某一项的绝对值小于ξ时&#xff0c;停止计算。 输入x及ξ的值&#xff0c;输出sin(x)的值&#xff0c;小数点后保留5位小数。…

YOLOv5涨点改进:多层次特征融合(SDI),小目标涨点明显,| UNet v2,比UNet显存占用更少、参数更少

💡💡💡本文全网独家改进:多层次特征融合(SDI),能够显著提升不同尺度和小目标的识别率 💡💡💡在YOLOv5中如何使用 1)iAFF加入Neck替代Concat; 💡💡💡Yolov5/Yolov7魔术师,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文…

设计模式-- 3.适配器模式

适配器模式 将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 角色和职责 请求者&#xff08;client&#xff09;&#xff1a;客户端角色,需要使用适配器的对象&#xff0c;不需要关心适配器内部的实现&#xff0c;…

电子学会C/C++编程等级考试2023年09月(四级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:酒鬼 Santo刚刚与房东打赌赢得了一间在New Clondike 的大客厅。今天,他来到这个大客厅欣赏他的奖品。房东摆出了一行瓶子在酒吧上。瓶子里都装有不同体积的酒。令Santo高兴的是,瓶子中的酒都有不同的味道。房东说道:“你可以喝尽…

“黑科技”四川首秀!“全光塑”个性化近视矫正技术在成都发布

眼睛被称为“心灵的窗口”&#xff0c;是我们最重要的器官之一。而近视却让我们心灵的窗口蒙上一层灰尘&#xff0c;为了摘掉眼镜&#xff0c;重获清晰视力&#xff0c;近视手术可谓是不二之选。数十年来&#xff0c;近视手术飞速发展&#xff0c;如今世界上前沿的近视矫正技术…

Springboot + websocket 实现 一对一 单人聊天

Springboot websocket 实现 一对一 单人聊天 要使用websocket ,需要添加 jar 打开项目中的pom.xml,添加以下内容 创建java端代码 配置websocke的endpoints 配置websocket的server ServerEndpoint(value "/websocket/{username}") 这句话 一定要注意, 这里 路…

web前端算法简介之链表

链表 链表 VS 数组链表类型链表基本操作 创建链表&#xff1a;插入操作&#xff1a;删除操作&#xff1a;查找操作&#xff1a;显示/打印链表&#xff1a;反转链表&#xff1a;合并两个有序链表&#xff1a;链表基本操作示例 JavaScript中&#xff0c;instanceof环形链表 判断…

从DETR到Mask2former(2): 损失函数loss function

DETR的损失函数包括几个部分&#xff0c;如果只看论文或者代码&#xff0c;比较难理解&#xff0c;最好是可以打断点调试&#xff0c;对照着论文看。但是现在DETR模型都已经被集成进各种框架中&#xff0c;很难进入内部打断掉调试。与此同时&#xff0c;数据的label的前处理也比…

python爬虫-代理ip理解

目录 1、为什么使用代理IP 2、代理IP 3、IP池 4、代理分类&#xff1a; 5、python中使用代理IP 6、如何找可以使用的代理IP 7、拿到IP后&#xff0c;测试IP的有效性 8、扩展理解正向代理和反向代理 1、为什么使用代理IP 就是为了防止ip被封禁&#xff0c;提高爬虫的效…

个人网站制作 Part 4 添加响应式设计 | Web开发项目

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加响应式设计&#x1f528;移动优先的响应式样式&#x1f527;步骤 1: 添加媒体查询 &#x1f528;图片和布局调整&#x1f527;步骤 2: 使用响应式图片&#x1f527;步…

【JavaSE】P33~P113 方法,重载,数组,对象,构造器,this关键字,数组和对象的内存图,JavaBean

练习 1 方法方法定义及调用JShell简单使用&#xff08;要求Java9以上&#xff09;方法语句流程控制及注意事项选择循环 方法的重载 2 数组三种初始化方式数组在内存中的存储内存图 3 对象对象内存图Getter/Setter快捷写法this 关键字构造方法JavaBean的四个标准对象数组 二、编…