【机器学习】——numpy教程

news2024/11/23 9:22:14

文章目录

    • 1.numpy简介
    • 2.初始化numpy
    • 3.ndarry的使用
      • 3.1numpy的属性
      • 3.2numpy的形状
      • 3.3ndarray的类型
    • 4numpy生成数组的方法
      • 4.1生成0和1数组
      • 4.2从现有的数组生成
      • 4.3生成固定范围的数组
      • 4.4生成随机数组
    • 5.数组的索引、切片
    • 6.数组的形状修改
    • 7.数组的类型修改
    • 8.数组的去重
    • 9.ndarray的运算
      • 9.1逻辑运算
      • 9.2通用判断函数
      • 9.4三元运算符
      • 9.4统计运算
    • 10.数组间的运算
      • 10.数组与数之间的运算
      • 10.2数组与数组之间的运算
    • 11.矩阵

1.numpy简介

numpy是一个开源的Python库,也就是相当于Python中的列表,即多维数组。那么为什么有了列表,我们还需要使用numpy呢?numpy可以计算大型的多维数组和矩阵操作,他的计算能力更强,运行的速度更快。
其实,Python中的列表,要想找到列表中对应的元素需要先通过寻找该元素的地址才可以访问到元素,因此,速度自然会慢一些。而Python中的numpy是存储在一片连续的地址空间上的,因此访问元素速度更快,类似于c++中的数组,物理空间是连续的。
在这里插入图片描述
而且,numpy内置了并行运算功能,当系统有多个核心的时候,做某种运算,numpy会自动做并行运算。

注意:Python中的列表可以存放不同的元素类型,而numpy只能存放相同的数据类型。

我们用过一个例子来看列表与numpy效率的对比:
在这里插入图片描述
我们可以看到numpy的效率更高。

2.初始化numpy

初始化numpy的操作如下:
通过 numpy.arry()进行numpy的初始化

import numpy as np
score = np.array(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
)
print(score)

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

3.ndarry的使用

3.1numpy的属性

属性名称属性解释
ndarry.shape数组维度,即几行几列
ndarray.ndim数组的维数,即是几维的数组
ndarray.size数组中总的元素个数
ndarray.itemsize数组每个元素的大小,单位为字节
ndarray.dtype数组中每个元素的类型

例如:

import numpy as np
score = np.array(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
)
print(score.shape)
print(score.dtype)
print(score.size)
print(score.itemsize)
print(score.ndim)

在这里插入图片描述

3.2numpy的形状

首先我们先创建一些数组

#创建一些不相同形状的数组
a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([1, 2, 3, 4])
c = np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])
print(a.shape)
print(b.shape)
print(c.shape)

在这里插入图片描述

3.3ndarray的类型

ndarray的主要类型有以下集中:

名称描述
np.bool用一个字节存储的布尔类型(True或是FALSE)
np.int32整数,默认的整数大小,四个字节
np.int64八个字节的整数类型
np.uint32无符号整数,四个字节大小
np.uint64无符号整数,八个字节大小
np.float32默认浮点数类型,四个字节大小
np.float64浮点数类型,八个字节大小
np.object_Python对象
np.string_字符串

我们在创建数组时,可以指定数组的类型,例如:
在这里插入图片描述
注意,当我们创建一维数组时,默认指的是列向量,例如:
在这里插入图片描述
即我们创建了一个一维向量,里面有三个元素,那么它是三行一列的矩阵。

4numpy生成数组的方法

4.1生成0和1数组

  • np.ones(shape, dtype),生成全0的数组
  • np.zeros(shape, dtype),生成全1的数组
  • np.ones_like(a, dtype),生成像a那样维度的全0数组
  • np.zeros_like(a, dtype),生成像a那样维度的全1数组

例如:
在这里插入图片描述
在这里插入图片描述

4.2从现有的数组生成

注意,我们要观察一个现象:

a = np.array([[1, 2, 3], [4, 5, 6]])
#从现有数组生成
a1 = np.array(a) #深拷贝
a2 = np.asarray(a) #浅拷贝
print(a1)
print(a2)

a[0][0] = 100
print(a1)
print(a2)

在这里插入图片描述
注意深拷贝和浅拷贝的区别,我们在修改a[0][0]元素后,a1没有发生改变,而a2发生了改变。浅拷贝:两个元素共用一块内存地址,深拷贝:重新申请一片内存,在把数据拷贝进去。 源数据的修改只会影响浅拷贝,不会对深拷贝造成影响。

4.3生成固定范围的数组

1.np.linspace(start, stop, num, endpoint),endpoint表示序列中是否包含stop值,默认是True。表示从start到stop中生成num个整形数据。
在这里插入图片描述
2.np.arange(start, stop, step, dtype),step表示步长,默认为1,不包含stop值。注意:arange不可以生成二维的数组,若想要生成二维的数组需要使用np.random.randint(),例如:

a = np.random.randint(40, 100, (10, 5))
print(a)
b = np.arange(40, 100, (10, 5)) #报错
print(b)

在这里插入图片描述
3.np.logspace(start, stop, num),创建等比数列,num为创建的个数,默认是50个。都是10的幂次方
在这里插入图片描述

4.4生成随机数组

使用np.random模块

一、np.random.normal(均值,标准差,生成个数),服从正态分布

x1 = np.random.normal(1.75, 1, 1000000)
#画出正态分布图
plt.figure(figsize=(20, 10), dpi=100)
plt.hist(x1, 1000) #绘制直方图
plt.show()

在这里插入图片描述
二、均匀分布

类似于Python中的random函数的随机种子,random函数如下(复习一下):

1.random.random(),返回0-1之间的浮点数,例如;
在这里插入图片描述
2.random.randint(a, b),返回a-b之间的整数,包含a和b,例如:
在这里插入图片描述
3.random.uniform(a, b),返回a-b之间的浮点数,包含a和b,例如:
在这里插入图片描述
4.random.randrange(a, b, c),返回从a-b,步长为c的随机数,
注意:np没有这个api,其他的都是有的。
例如:
在这里插入图片描述
返回的就是0, 10, 20, …, 100之间的数。

关于random生成随机种子的方式还有很多很多,

我们再来看一下均值分布:np.random.uniform(a, b, num):最经常使用
在这里插入图片描述

5.数组的索引、切片

与Python中的列表操作类似

在这里插入图片描述

6.数组的形状修改

1.ndarray.reshape(new_shape, order),当不知道设置成多少行或者列的时候,可以直接设置成-1.

2.ndarray.resize(new_shape),与reshape类似。

3.ndarray.T:矩阵转置

在这里插入图片描述

7.数组的类型修改

ndarray.astype(new_type)
在这里插入图片描述

8.数组的去重

np.unique(a)
在这里插入图片描述

9.ndarray的运算

9.1逻辑运算

在这里插入图片描述

9.2通用判断函数

1.np.all():判断所有
2.np.any():判断是否存在
在这里插入图片描述

9.4三元运算符

np.where()
在这里插入图片描述

9.4统计运算

np…

max()
min()
median():中位数
mean():平均值
std()::标准差
var():方差
argmax()
argmin()
在这里插入图片描述

10.数组间的运算

10.数组与数之间的运算

在这里插入图片描述

10.2数组与数组之间的运算

数组与数组之间的运算两个矩阵的维度不是必须保持一致的。

广播机制:
在这里插入图片描述
在这里插入图片描述

11.矩阵

np.matmul
np.dot

是一样的,都是矩阵的点乘,但是matmul不支持矩阵和标量的乘法
在这里插入图片描述

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

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

相关文章

【Visual Studio】下载安装 Visual Studio Community 并配置 C++ 桌面开发环境的图文教程

引言 Visual Studio 是一个面向 .NET 和 C 开发人员的综合性 Windows 版 IDE,可用于构建 Web、云、桌面、移动应用、服务和游戏。 安装步骤 访问 Visual Studio 的官方下载页面: https://visualstudio.microsoft.com/zh-hans/downloads/运行已下载的 V…

java疫苗发布和接种预约系统源码(springboot)

项目简介 疫苗发布和接种预约系统实现了以下功能: 疫苗发布和接种预约系统的主要使用者分为: 管理员对公告信息,医院信息,疫苗信息,医生信息,用户信息,论坛帖子信息以及预约接种信息等信息进行…

ThinkPad T480拆机屏幕改装:便携式显示器DIY指南

ThinkPad T480拆机屏幕改装:便携式显示器DIY指南 本文记录了将旧笔记本电脑 T480 拆机屏幕改装为便携式显示器的全过程。作者在决定升级设备后,选择通过 DIY 方式利用原有的屏幕资源。文章详细介绍了屏幕驱动板的安装、螺丝孔的剪裁、排线连接及固定的步…

系统性能优化——绑核

简要 绑核正如其名,将线程/进程绑定在一个或多个CPU核心。该技术可以使进程或线程在特定的处理器上运行,而不会被操作系统调度到其他处理器上。这里有两层含义。 如果线程被绑定在指定核心上,则只会在该核心上运行,即使其他核心…

Django自定义过滤器

一、介绍 Django过滤器是一种用于在Django模板中处理数据的技术。它们的主要作用是对模板中的变量进行加工、过滤或格式化,然后返回一个新的值供模板使用。这些过滤器可以在变量输出时,对输出的变量值做进一步的处理,以满足特定的显示需求。…

C# 串口通信教程

串口通信(Serial Communication)是一种用于设备之间数据传输的常见方法,通常用于与外部硬件设备(如传感器、机器人、微控制器)进行通信。在 C# 中,System.IO.Ports 命名空间提供了与串口设备交互的功能&…

Golang | Leetcode Golang题解之第508题出现次数最多的子树元素和

题目: 题解: func findFrequentTreeSum(root *TreeNode) (ans []int) {cnt : map[int]int{}maxCnt : 0var dfs func(*TreeNode) intdfs func(node *TreeNode) int {if node nil {return 0}sum : node.Val dfs(node.Left) dfs(node.Right)cnt[sum]if…

数字后端零基础入门系列 | Innovus零基础LAB学习Day6

今天没有具体的数字IC后端lab实验。今天的重点是熟悉掌握静态时序分析STA中的几类timing path以及setup和hold检查机制(包含setup和hold计算公式)。 芯片流片失败的那些故事 数字后端零基础入门系列 | Innovus零基础LAB学习Day5 等大家把今天内容学习…

设计模式(二)工厂模式详解

设计模式(二)工厂模式详解 简单工厂模式指由一个工厂对象来创建实例,适用于工厂类负责创建对象较少的情况。例子:Spring 中的 BeanFactory 使用简单工厂模式,产生 Bean 对象。 工厂模式简介 定义:工厂模式是一种创建…

Spring Boot框架下中小企业设备管理系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理中小企业设备管理系统的相关信息成为必然。…

Kafka-代码示例

一、构建开发环境 File > New > Project 选择一个最简单的模板 项目和坐标命名 配置maven路径 添加maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients --><dependency><groupId>org.apache.kaf…

最长子序列模型二(二分优化版)

文章目录 提高课题解一、拦截导弹二、导弹防御系统三、最长公共上升子序列四、二分函数速写 基础课题解五、最长上升子序列 II 提高课题解 一、拦截导弹 题目链接 第一问非常简单&#xff0c;直接用之前最长上身子序列模板就行 第二问就有难度了&#xff0c;我们要用最少的递…

基于SSM“毛毛宠物店”宠物信息交流平台的设计与实现

开发说明 开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myec…

DEV-C++如何调试

1、先编译&#xff0c;再点击“调试”按钮 2、使用调试按钮&#xff0c;可以输入输出数据 第21次发博客 以后会慢慢更新

【计网】从零开始认识IP协议 --- 认识网络层,认识IP报头结构

从零开始认识IP协议 1 网络层协议1.1 初步认识IP协议1.2 初步理解IP地址 2 IP协议报头3 初步理解网段划分 1 网络层协议 1.1 初步认识IP协议 我们已经熟悉了传输层中的UDP和TCP协议&#xff0c;接下来我们来接触网络层的协议&#xff1a; 网络层在计算机网络中的意义主要体现…

EXCELL中如何两条线画入一张图中,标记坐标轴标题?

1&#xff0c;打开excel&#xff0c;左击选中两列&#xff0c; 2&#xff0c;菜单栏>“插入”>”二维折线图”选中一个 3&#xff0c;选中出现的两条线中的一条右击>最下一行&#xff0c;“设置数据系列格式” 4&#xff0c;右测“系列选项中”>点击“次坐标轴” 5…

Java 开发——(上篇)从零开始搭建后端基础项目 Spring Boot 3 + MybatisPlus

一、概述 记录时间 [2024-10-23] 本文是一个基于 Spring Boot 3 MybatisPlus 的项目实战开发&#xff0c;主要涵盖以下几个方面&#xff1a; 从零开始的项目创建IDEA 中开发环境的热部署Maven、Swagger3、MybatisPlus 等的配置路由映射知识静态资源访问文件上传功能实现拦截器…

颐驰06持续交付,明日科技赋能出行生活

在全球智能出行领域&#xff0c;自动驾驶技术的发展一直是行业关注的焦点。不久前&#xff0c;特斯拉发布的自动驾驶出租车引发了全球关注&#xff0c;但由于缺乏具体的技术细节&#xff0c;导致投资者信心受挫&#xff0c;特斯拉股票一度下跌近10%。与此同时&#xff0c;中国车…

智能台灯设计(一)原理图设计

1. 前言 作者最近突发奇想&#xff0c;想自己做一个小台灯&#xff0c;设想的功能有&#xff1a;带锂电池可充电、可以调节亮度&#xff0c;后续通过增加WIFI模块实现手机控制开关功能。目前先实现最简单的功能&#xff0c;有时间再一步步完善吧。 2. 原理图设计 充电芯片使用…

常用的三角公式

目录 1. 基本公式​ 2. 倍角公式​ 3. 半角公式​ 4. 和差公式​ 5. 和差化积​ 6. 积化和差​ 7. 万能公式​ 1. 基本公式 2. 倍角公式 3. 半角公式 4. 和差公式 5. 和差化积 6. 积化和差 7. 万能公式