Python机器学习库(numpy库)

文章目录

  • Python机器学习库(numpy库)
    • 1. 数据的维度
    • 2. numpy基础知识
      • 2.1 numpy概述
      • 2.1 numpy概述
      • 2.1 numpy概述
      • 2.2 numpy库的引用
    • 3. ndarray数组的创建
      • 3.1 N维数组对象ndarray
      • 3.2 创建ndarray数组
        • 3.2.1 使用Python列表、元组创建ndarray数组
        • 3.2.2 使用numpy函数创建ndarray数组
      • 3.3 ndarray数组的属性
      • 3.4 ndarray数组的元素类型
      • 3.5 ndarray数组的变换

Python机器学习库(numpy库)

1. 数据的维度

一个数据表达一个含义,而一组数据表达一个或多个含义。

维度:是一组数据的组织形式

一维数据:由对等关系的有序或无序数据构成,采用线性方式组织,对应列表、数组和集合等概念。

列表:数据类型可以不同
数组:数据类型相同

二维数据:由多个一维数据构成,是一维数据的组合形式。

表格是典型的二维数据,其中,表头是二维数据的一部分

多维数据:由一维或二维数据在新维度上扩展形成。

数据维度的Python表示:

  1. 一维数据:列表和集合类型
  2. 二维数据:列表类型
  3. 多维数据:列表类型
  4. 高维数据:字典类型或其它如JSON、XML和YAML格式

2. numpy基础知识

2.1 numpy概述

numpy是开源的Python科学计算基础库,包含:

  • 强大的N维数组对象ndarray(Array; Matrix)
  • 成熟的(广播)函数库
  • 整合了C/C++/Fortran代码的工具
  • 实用的线性代数、傅里叶变换和随机数生成函数
  • 与稀疏矩阵运算包scipy配合使用更加方便

2.1 numpy概述

numpy是开源的Python科学计算基础库,包含:

  • 强大的N维数组对象ndarray(Array; Matrix)
  • 成熟的(广播)函数库
  • 整合了C/C++/Fortran代码的工具
  • 实用的线性代数、傅里叶变换和随机数生成函数
  • 与稀疏矩阵运算包scipy配合使用更加方便

2.1 numpy概述

numpy是开源的Python科学计算基础库,包含:

  • 强大的N维数组对象ndarray(Array; Matrix)
  • 成熟的(广播)函数库
  • 整合了C/C++/Fortran代码的工具
  • 实用的线性代数、傅里叶变换和随机数生成函数
  • 与稀疏矩阵运算包scipy配合使用更加方便
    在这里插入图片描述
    numpy是SciPy、Pandas等数据处理或科学计算库的基础。它提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库,为进行严格的数字处理而产生。很多大型金融公司,以及核心的科学计算组织如:Lawrence Livermore,NASA都在用其处理一些本来使用C++,Fortran或Matlab等所做的任务。

2.2 numpy库的引用

Anaconda里面已经安装过numpy。

原生Python安装

在控制台中输入:
pip install numpy

安装之后可以导入

import numpy as np
#尽管别名可以省略或更改,但建议使用以上约定俗成的别名“np“

3. ndarray数组的创建

3.1 N维数组对象ndarray

Python已有列表类型,为什么需要一个数组对象(类型)?

标准Python中用list(列表)保存值,可以当做数组使用,但因为列表中的元素可以是任何对象,所以浪费了CPU运算时间和内存。

numpy诞生为了弥补这些缺陷。它提供了两种基本的对象:

  • ndarray:全称(n-dimensional array object)是储存单一数据类型的多维数组。
  • ufunc:全称(universal function object)它是一种能够对数组进行处理的函数。

numpy中文官网

A和B是一维数组,计算A2+B3,示例如下:

# python基础语法方式
def pySum():
    a=[0,1,2,3,4]
    b=[5,6,7,8,9]
    c=[]
    for i in range(len(a)):
        c.append(a[i]+b[i])
    return c
print(pySum())

[5, 7, 9, 11, 13]

# numpy库方式
def npSum():
    a=np.array([0,1,2,3,4])
    b=np.array([5,6,7,8,9])
    return a+b
print(npSum())

[ 5 7 9 11 13]
N维数组对象:ndarray

ndarray是一个多维数组对象,由两部分构成:

  • 实际的数据
  • 描述这些数据的元数据(数据维度、数据类型等)

numpy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型(同质)元素的多维数组。
在这里插入图片描述
ndarray对维数没有限制。
小括号从左到右分别为第0轴,第1轴,第2轴,第3轴。

3.2 创建ndarray数组

ndarray数组的创建方法:

  • 使用Python列表、元组创建ndarray数组
  • 使用numpy函数创建ndarray数组
  • 3.2.1 使用Python列表、元组创建ndarray数组
x = np.array(list/tuple)
x = np.array(list/tuple, dtype=np.float32)

当np.array()不指定dtype时,numpy将根据数据情况关联一个dtype类型

一维ndarray

import numpy as np
# 一维array
a = np.array([2,23,4], dtype=np.int32) # np.int默认为int32
print(a)
print(a.dtype)

[ 2 23 4]
int32

多维ndarray

# 多维array
a = np.array([[2,3,4],
              [3,4,5]])
print(a) # 生成2行3列的矩阵

[[2 3 4]
[3 4 5]]

c = np.array([(1,2,3),
            [4,5,6],
            (7,8,9)],dtype=np.float32)
c,c.dtype

(array([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]], dtype=float32),
dtype(‘float32’))

3.2.2 使用numpy函数创建ndarray数组
函数说明
np.arange(n)类似range()函数,返回ndarray类型,元素从0到n‐1
np.ones(shape)根据shape生成一个全1数组,shape是元组类型
np.zeros(shape)根据shape生成一个全0数组,shape是元组类型
np.full(shape,val)根据shape生成一个数组,每个元素值都是val
np.linspace()根据起止数据等间距地填充数据,形成数组
np.empty(shape))创建全空数组每个值都是接近于零的数
np.eye(n)创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.ones_like(a)根据数组a的形状生成一个全1数组
np.zeros_like(a)根据数组a的形状生成一个全0数组
np.full_like(a,val)根据数组a的形状生成一个数组,每个元素值都是val
np.concatenate()将两个或多个数组合并成一个新的数组

创建连续数组

# 创建连续数组
a = np.arange(10,41,2) # 10-20的数据,步长为2
print(a)

[10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40]

创建全1数据

# 创建全一数据,同时指定数据类型
a = np.ones((3,4),dtype=np.int32)
print(a)

[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
创建全零数组

a = np.zeros((3,4))
print(a) # 生成3行4列的全零矩阵

[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]

创建全特定数值ndarray数组

a=np.full((3,4,5),10)
a.shape,a

((3, 4, 5),
array([[[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10]],

[[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10]],

[[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10]]]))

根据起止数据创建等间距序列数据

# 创建线段型数据
a = np.linspace(1,10,20) # 开始端1,结束端10,且分割成20个数据,生成线段
print(a)

[ 1. 1.47368421 1.94736842 2.42105263 2.89473684 3.36842105
3.84210526 4.31578947 4.78947368 5.26315789 5.73684211 6.21052632
6.68421053 7.15789474 7.63157895 8.10526316 8.57894737 9.05263158
9.52631579 10. ]

创建全空数组

# 创建全空数组,其实每个值都是接近于零的数
a = np.empty((3,4))
print(a)

[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]

#将列表转换为矩阵
a=np.eye(5)
print(a)

[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]

3.3 ndarray数组的属性

属性说明
.ndim秩,即轴的数量或维度的数量
.shapendarray数组的尺度,对于矩阵,n行m列
.sizendarray数组元素的个数,相当于.shape中n*m的值
.dtypendarray数组的元素类型
.itemsizendarray数组中每个元素的大小,以字节为单位

秩、维度、轴的数量

a=np.full((3,4,5),1.,dtype=np.float32)
print(a)
print('number of dim:', a.ndim)

[[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]

[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]

[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]]
number of dim: 3

数组的尺度、行数、列数…

print('shape:',a.shape)

shape: (3, 4, 5)

元素个数

print('size:',a.size)

size: 60

元素类型

print('type:',a.dtype)

type: float32

查看每个元素所占空间的大小,以字节为单位

print('size:',a.itemsize)

size: 4

3.4 ndarray数组的元素类型

数据类型说明
bool布尔类型,True或False
intc与C语言中的int类型一致,一般是int32或int64
intp用于索引的整数,与C语言中size_t一致,int32或int64
int8字节长度的整数,取值:[‐128,127]
int1616位长度的整数,取值:[‐32768,32767]
int3232位长度的整数,取值:[‐231,231‐1]
int6464位长度的整数,取值:[‐263,263‐1]
uint88位无符号整数,取值:[0,255]
uint1616位无符号整数,取值:[0,65535]
uint3232位无符号整数,取值:[0,232‐1]
uint6432位无符号整数,取值:[0,264‐1]
float1616位半精度浮点数:1位符号位,5位指数,10位尾数
float3232位半精度浮点数:1位符号位,8位指数,23位尾数
float6464位半精度浮点数:1位符号位,11位指数,52位尾数
complex64复数类型,实部和虚部都是32位浮点数
complex128复数类型,实部和虚部都是64位浮点数

Python语法仅支持整数、浮点数和复数3种类型,而ndarray为什么要支持这么多种元素类型?

  • 科学计算涉及数据较多,对存储和性能都有较高要求
  • 对元素类型精细定义,有助于numpy合理使用存储空间并优化性能
  • 对元素类型精细定义,有助于程序员对程序规模有合理评估

ndarray数组可以由非同质对象构成,非同质ndarray元素为对象类型,非同质ndarray数组无法有效发挥numpy优势,尽量避免使用。

x=np.array([[0,1,2,3,4],
          [5,6,7,8]],dtype=object)
x.dtype

dtype(‘O’)

dtype(‘O’)显示ndarray数组x中的每个元素是非同质对象类型。

x=np.array([[0,1,2,3,4],
          [5,6,7,8,9]],dtype=object)
x.dtype

dtype(‘O’)

3.5 ndarray数组的变换

对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换。

方法说明
.reshape(shape)不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape)与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2)将数组n个维度中两个维度进行调换
.flatten()对数组进行降维,返回折叠后的一维数组,原数组不变
.astype()对数组进行类型变换
.tolist()将数据类型转换为列表

reshape操作

a = [ i for i in range(24)]
a=np.array(a)
print(a)
# 使用reshape改变上述数据的形状
b = a.reshape((4,6))
print(b)

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]

b.resize((2,3,4))
b

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]]])

c = b.swapaxes(0,1)
print(c, c.shape)

[[[ 0 1 2 3]
[12 13 14 15]]

[[ 4 5 6 7]
[16 17 18 19]]

[[ 8 9 10 11]
[20 21 22 23]]] (3, 2, 4)

c=b.flatten()
c

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])

ndarray数组的类型变换
new_a = a.astype(new_type)

a=np.ones((2,3,4),dtype=np.int32)
a

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

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

相关文章

029 命令行传递参数

1.循环输出args字符串数组 public class D001 {public static void main(String[] args) {for (String arg : args) {System.out.println(arg);}} } 2.找打这个类的路径,打开cmd cmd C:\Users\Admin\IdeaProjects\JavaSE学习之路\scanner\src\com\yxm\demo 3. 编译…

Servlet+Ajax实现对数据的列表展示(极简入门)

目录 1.准备工作 1.数据库源(这里以Mysql为例) 2.映射实体类 3.模拟三层架构(Dao、Service、Controller) Dao接口 Dao实现 Service实现(这里省略Service接口) Controller层(或叫Servlet层…

2024济南生物发酵展:会议日程安排和技术装备亮点预告

2024济南发酵展/2024生物发酵展/2024山东发酵展/2024济南生物制药展/2024生物技术展/2024食品设备展/2024食品加工展/2024济南细胞工程展 由中国生物发酵产业协会主办,上海信世展览服务有限公司承办的2024第12届国际生物发酵产品与技术装备展览会(济南&a…

深入理解Istio服务网格数据平面Envoy

一、服务网格概述(service mesh) 在传统的微服务架构中,服务间的调用,业务代码需要考虑认证、熔断、服务发现等非业务能力,在某种程度上,表现出了一定的耦合性 服务网格追求高级别的服务流量治理能力,认证、熔断、服…

2023.12 淘天-数科 已offer

文章目录 岗位信息1面ld 12.17 1H2面 VP 12.18 40min3面 HR 12.2012.21offer薪资方案沟通 岗位信息 1面ld 12.17 1H (是一个从业估计很长时间前辈,很平和,感觉能学到很多东西) 自我介绍项目深究1.说下自己工作里最有成就感的事和…

图论练习3

内容:过程中视条件改变边权,利用树状数组区间加处理 卯酉东海道 题目链接 题目大意 个点,条有向边,每条边有颜色和费用总共有种颜色若当前颜色与要走的边颜色相同,则花费为若当前颜色与要走的边颜色不同,…

MYSQL——MySQL8.3无法启动

在新电脑上装了个MySQL,但是无法使用net start mysql启动,很是纳闷,使用mysqld --console去查看报错,也是没报错的,但是奇怪的是,我输入完这个mysqld --console之后,就等于启动了mysql了&#x…

第十一篇【传奇开心果系列】Python的OpenCV技术点案例示例:三维重建

传奇开心果短博文系列 系列短博文目录Python的OpenCV技术点案例示例系列短博文目录一、前言二、OpenCV三维重建介绍三、基于区域的SGBM示例代码四、BM(Block Matching)算法介绍和示例代码五、基于能量最小化的GC(Graph Cut)算法介绍和示例代码六、相机标定介绍和示例代码七…

【数据结构与算法】之排序系列-20240203

这里写目录标题 一、628. 三个数的最大乘积二、645. 错误的集合三、747. 至少是其他数字两倍的最大数四、905. 按奇偶排序数组五、922. 按奇偶排序数组 II六、976. 三角形的最大周长 一、628. 三个数的最大乘积 简单 给你一个整型数组 nums ,在数组中找出由三个数组…

Leetcode刷题笔记题解(C++):36. 有效的数独

思路一:暴力破解,两个二维数组记录行、列对应的数字出现的次数,比如rows[i][index]表示的数字index在i行出现的次数,三维数组记录每个块中对应数字出现的次数,比如boxes[i/3][j/3][index]表示的数字index在[i/3][j/3]个…

Hugging Face推出自定义AI聊天Assistants;谷歌推出图像生成工具 ImageFX

🦉 AI新闻 🚀 谷歌推出图像生成工具 ImageFX 摘要:谷歌在 Imagen 2 的基础上推出新的图像生成工具 ImageFX,通过简单的文字提示可以生成高质量图像。该工具包含了提示界面,让用户可以快速尝试创作和想法的相邻维度。…

数据结构—基础知识:哈夫曼树

文章目录 数据结构—基础知识:哈夫曼树哈夫曼树的基本概念哈夫曼树的构造算法哈夫曼树的构造过程哈夫曼算法的实现算法:构造哈夫曼树 数据结构—基础知识:哈夫曼树 哈夫曼树的基本概念 哈夫曼(Huffman)树又称最优树&…

通过 ChatGPT 的 Function Call 查询数据库

用 Function Calling 的方式实现手机流量包智能客服的例子。 def get_sql_completion(messages, model"gpt-3.5-turbo"):response client.chat.completions.create(modelmodel,messagesmessages,temperature0,tools[{ # 摘自 OpenAI 官方示例 https://github.com/…

ASP.NET Core 自定义解压缩提供程序

写在前面 在了解ASP.NET Core 自定义请求解压缩中间件的应用时,依据官方文档操作下来碰到了几个问题,这边做个记录。 关键点就是配置 Content-Encoding,参数需要和代码中添加的提供程序的Key保持一致; builder.Services.AddRequ…

问题:媒体查询语法中, 可用设备名参数表示“文档打印或预览“的是 #媒体#媒体#其他

问题:媒体查询语法中, 可用设备名参数表示"文档打印或预览"的是 A、C.?screen B.?projection C、A.?print D.?speech 参考答案如图所示

Unity DOTS中的baking(三)过滤baking的输出

Unity DOTS中的baking(三)过滤baking的输出 默认情况下,在conversation world(baker和baking system运行的环境)下产生的所有entities和components,都会作为baking环节的输出。在baking结束时,U…

使用Arcgis对欧洲雷达高分辨率降水数据重投影

当前需要使用欧洲高分辨雷达降水数据,但是这个数据的投影问题非常头疼。实际的投影应该长这样(https://gist.github.com/kmuehlbauer/645e42a53b30752230c08c20a9c964f9?permalink_comment_id2954366https://gist.github.com/kmuehlbauer/645e42a53b307…

代码随想录刷题笔记 DAY 18 | 找树左下角的值 No.513 | 路经总和 No.112 | 从中序与后序遍历序列构造二叉树 No.106

Day 18 01. 找树左下角的值(No. 513) 题目链接 代码随想录题解 1.1 题目 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入…

网络安全挑战:威胁建模的应对策略与实践

在数字威胁不断演变的时代,了解和降低网络安全风险对各种规模的组织都至关重要。威胁建模作为安全领域的一个关键流程,提供了一种识别、评估和应对潜在安全威胁的结构化方法。本文将深入探讨威胁建模的复杂性,探索其机制、方法、实际应用、优…

国标GB/T 28181详解:设备视音频文件检索消息流程

目 录 一、设备视音频文件检索 二、设备视音频文件检索的基本要求 三、命令流程 1、流程图 2、流程描述 四、协议接口 五、产品说明 六、设备视音频文件检索的作用 七、参考 在国标GBT28181中,定义了设备视音频文件检索消息的流程,主…