【机器学习】——numpy教程

文章目录

    • 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不支持矩阵和标量的乘法
在这里插入图片描述

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

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

相关文章

接口测试(七)jmeter——参数化(RandomString函数)

一、RandomString函数 需求:模拟10个用户注册 1. 【工具】–>【函数助手对话框】 2. 选择RandomString函数 假设手机号码前3位设置为固定数值136,后8位可用RandomString函数随机产生数值 ① Random string length:8(随机长度…

记录element-ui改造select显示为table,并支持多查询条件

最近遇到的一个需求 , 很有趣,是需要一个select组件,要求显示工号,员工姓名,以及区域 三个字段,并且要支持三个字段的查询。显然element原生的组件不适用,这时候我们需要改造一下,把…

基于大数据 Python Vue 美食推荐可视化系统(源码+LW+部署讲解+数据库)

!!!!!!!!! 会持续一直更新下去 有问必答 一键收藏关注不迷路 源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwdjf1d 提取码: jf1d &#…

Java后端面试题:Java基础篇

目录 Java基础 1.请你说说Java中基本数据类型的bit长度? 2.switch支持哪些数据类型?支持long么? 3.讲一下常见编码方式? 4.char能不能存储中文? 5.为什么数组索引从0开始呢?假如从1开始不行吗&#xf…

w003基于Springboot的图书个性化推荐系统的设计与实现

🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…

Git 课程任务

破冰和创建项目 https://github.com/WangXiuhao/loveailab

CORE 安全与身份认证《1》 UseRouting 、UseEndpoints

认证、授权、确权与鉴权 路由 web的请求到达后端服务时,controller(控制器)会处理传入的http请求并响应用户操作, 请求的url会被映射到控制器的操作方法上。 此映射过程由应用程序中定义的路由规则完成。 》》》net core 在中间件中的鉴权授权的位置一…

rtp协议:rtcp包格式和传输间隔

RTP Control Protocol -- RTCP-rtp控制协议 实时传输控制协议(RTCP)基于对会话中的所有参与者定期传输控制包,使用与数据包相同的分发机制。底层协议必须提供数据包和控制包的多路复用,例如使用UDP时使用不同的端口号。RTCP执行四…

Golang | Leetcode Golang题解之第501题二叉搜索树中的众数

题目: 题解: func findMode(root *TreeNode) (answer []int) {var base, count, maxCount intupdate : func(x int) {if x base {count} else {base, count x, 1}if count maxCount {answer append(answer, base)} else if count > maxCount {ma…

一站式学习 Shell 脚本语法与编程技巧,踏出自动化的第一步

文章目录 1. 初识 Shell 解释器1.1 Shell 类型1.2 Shell 的父子关系 2. 编写第一个 Shell 脚本3. Shell 脚本语法3.1 脚本格式3.2 注释3.2.1 单行注释3.2.2 多行注释 3.3 Shell 变量3.3.1 系统预定义变量(环境变量)printenv 查看所有环境变量set 查看所有…

RK3568平台(基础篇)预编译命令原理

一.宏定义(#define)是什么 #define 可以将一对文本进行替换,在编译器读到需要被替换的文本的时候,会将这些文本全部替换成我们给定的文本。 如下是一个宏的定义: #define A 100 二.预编译 预处理命令 #if、#endif、#undef、#ifdef、#else、#elif 在接触#if、#undef这…

图片尺寸怎样能快速修改?图片改尺寸的4款在线工具

图片怎么压缩调整大小呢?现在的图片随着质量或者尺寸都会比较大,在很多平台上传时会导致无法使用,需要按照要求调整图片大小后才能够正常使用,那么如何操作能够快速修改图片大小呢?下面来给大家分享图片改大小的4款在线…

使用virtualenv/Anaconda/Miniconda创建python虚拟环境

自带venv 免安装直接使用 虚拟环境是创建一种隔离的工作空间,在该工作空间中可以安装不同的库,而不影响其他的项目。其中,python自带的venv,就可以很好的创建虚拟环境了。 # 创建虚拟环境 python -m venv venv# windows系统激活…

Linux -- 共享内存(2)

目录 命令 ipcs -m : 命令 ipcrm -m shmid: 共享内存的通信: 为什么共享内存更高效? 代码: ShmClient.cc: ShmServer.cc: 结果: 如何让共享内存实现同步? 代码&a…

119.WEB渗透测试-信息收集-ARL(10)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:118.WEB渗透测试-信息收集-ARL(9) 释放完成后,点击创…

[mysql]子查询的概述和分类及单行子查询

子查询引入 查询的基本结构已经给大家了,子查询里面也是有一些新的内容,子查询其实就是在查询中嵌套另一个查询,叫嵌套查询可能大家更容易理解一点..,类似与FOR循环和FOR循环的嵌套,这一章是我们查询的最难的部分,大家 难度是查询的顶峰,多表查询和子查询是非常重要,SQL优化里…

2024年AR游戏市场分析:创业指南

自从2016年《Pokmon GO》横空出世以来,增强现实(AR)游戏已经成为移动游戏领域的一大亮点。然而,随着时间的推移,AR游戏市场是否仍然充满机遇?本文将对当前市场上成功的AR游戏进行分析,并为有意进入这一领域的创业者提供一些启示。 一、市场领导者分析 《Pokmon GO》自…

kotlin实现viewpager

说明:kotlin tablayout viewpager adapter实现滑动界面 效果图 step1: package com.example.flushfragmentdemoimport androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.fragment.app.Fragment import androidx.viewpager2.adapter.…

用哪种建站程序做谷歌SEO更容易?

做网站很容易,但做一个能带来流量和订单的网站就没那么简单了。尤其是在谷歌SEO优化方面,不同的建站程序对SEO的支持程度也不同。在这方面,WordPress和Shopify无疑是最佳选择。 WordPress作为一个内容管理系统(CMS)&am…

【无人机设计与控制】基于Astar算法无人机路径规划,优化路径平滑

摘要 本文提出了一种基于A算法的无人机路径规划方法,并通过路径平滑优化提升路径的可行性和安全性。传统A算法在生成路径时,常因路径节点分布不规则导致路径不平滑,影响无人机的飞行效率和安全性。本文通过引入贝塞尔曲线对A*算法生成的路径…