Python3------NumPy学习(一)

2023-10-29

 NumPy学习

1------NumPy介绍

Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。

Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。

Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器

1.1------ndarray

NumPy提供了一个N维数组类型ndarray,它描述了相同类型的“items”的集合。

score = np.array([[80, 89, 86, 67, 79],
[78, 97, 89, 67, 81],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[70, 79, 84, 67, 84],
[94, 92, 93, 67, 64],
[86, 85, 83, 67, 80]])

就是将一个Python内置的数组作为参数传递给numpy,返回结果如下:

array([[80, 89, 86, 67, 79],
       [78, 97, 89, 67, 81],
       [90, 94, 78, 67, 74],
       [91, 91, 90, 67, 69],
       [76, 87, 75, 67, 86],
       [70, 79, 84, 67, 84],
       [94, 92, 93, 67, 64],
       [86, 85, 83, 67, 80]])

使用Python列表可以存储一维数组,通过列表的嵌套可以实现多维数组,那么为什么还需要使用Numpy的ndarray呢?

这就关乎到效率这个问题了,请看下一节。

1.2------ndarray与Python原生list运算效率对比

import numpy as np
import random
import time
#初始化定义一个列表list
a = []
for i in range(100000000):
	#往a中随机添加100000000个元素
	a.append(random.random())
t1 = time.time()
#求列表a中元素的和
sum = sum(a)
t2 = time.time()
#求和开始时间
print(t1)
#求和结束时间
print(t2)
#总共花费的时间
print(t2-t1)

b = np.array(a)
t3 = time.time()
sum2 = np.sum(b)
t4 = time.time()
print(t4-t3)

输出结果如下:

1543031869.482664
1543031870.6981153
1.2154512405395508
0.22154474258422852

所以可见,ndarray中对数据的计算效率比传统Python内置对象要高得多!!!

机器学习的最大特点就是大量的数据运算,那么如果没有一个快速的解决方案,那可能现在python也在机器学习领域达不到好的效果。

思考:ndarray为什么这么快呢?

1.2.1------ndarray的优势

直接上图

从图中我们可以看出ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快。

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

下面,我们就来具体学习一下ndarray

2------ndarray

2.1------ndarray的属性

属性名字 属性解释
ndarray.shape 数组维度的元组
ndarray.ndim 数组维数
ndarray.size 数组中的元素数量
ndarray.itemsize 一个数组元素的长度(字节)
ndarray.dtype 数组元素的类型

 2.2------ndarray的形状

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)

结果如下:

(2, 3)
(4,)
(2, 2, 3)

在这里,详细说一下三位数组怎么分析其形状!!!

如例:[[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]

首先去掉最外层的中括号,剩下----[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]此时由两部分构成[[1,2,3],[4,5,6]]和[[7,8,9],[10,11,12]]

把这两个叫做构成单元

所以第一维是2

同理对上述构成单元分析(只需要分析一个即可,这里拿第一个说明),再次去掉最外层的中括号,剩下----[1,2,3],[4,5,6]此时由两部分构成,[1,2,3]和[4,5,6]也是两个构成单元。

所以第二维是2

再对上面构成单元分析,去掉中括号,剩下1,2,3

所以第三位是3--------最后结果即(2,2,3)

2.3----ndarrat的数据类型

代码上见:

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

结果如下:

int32

ndarray中具体的数据类型如下表:

名称 描述 简写
np.bool 用一个字节存储的布尔类型(True或False) 'b'
np.int8 一个字节大小,-128 至 127 'i'
np.int16 整数,-32768 至 32767 'i2'
np.int32 整数,-2**31 至 2**32 -1 'i4'
np.int64 整数,-2**63 至 2**63 - 1 'i8'
np.uint8 无符号整数,0 至 255 'u'
np.uint16 无符号整数,0 至 65535 'u2'
np.uint32 无符号整数,0 至 2 ** 32 - 1 'u4'
np.uint64 无符号整数,0 至 2 ** 64 - 1 'u8'
np.float16 半精度浮点数:16位,正负号1位,指数5位,精度10位 'f2'
np.float32 单精度浮点数:32位,正负号1位,指数8位,精度23位 'f4'
np.float64 双精度浮点数:64位,正负号1位,指数11位,精度52位 'f8'
np.complex64 复数,分别用两个32位浮点数表示实部和虚部 'c8'
np.complex128 复数,分别用两个64位浮点数表示实部和虚部 'c16'
np.object_ python对象 'O'
np.string_ 字符串 'S'
np.unicode_ unicode类型 'U'

 在创建的时候可以这样创建:

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

2.4------基本操作

2.4.1------生成数组

  • empty(shape[, dtype, order]) empty_like(a[, dtype, order, subok])

 见名知意:参数为shape时许传递一个表示维数的数组,参数为a[....]时需要传递进去一个数组或者矩阵,下面也是一样。

  • eye(N[, M, k, dtype, order])
  • identity(n[, dtype])
  • ones(shape[, dtype, order])
  • ones_like(a[, dtype, order, subok])
  • zeros(shape[, dtype, order]) zeros_like(a[, dtype, order, subok])
    full(shape, fill_value[, dtype, order])
  • full_like(a, fill_value[, dtype, order, subok])

empty系列:

a = np.empty([3,4])
print(a)
b = [[1,2,3],[4,5,6]]
b = np.empty_like(b)
print(b)
#eye()
c = np.eye(5)
print(c)

d = np.identity(5)
print(d)



[[8.82769181e+025 7.36662981e+228 7.54894003e+252 2.95479883e+137]
 [1.42800637e+248 2.64686750e+180 1.09936856e+248 6.99481925e+228]
 [7.54894003e+252 7.67109635e+170 2.64686750e+180 5.63234836e-322]]
[[0 0 0]
 [0 0 0]]
[[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.]]
[[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.]]

解释:

empty()方法回按照传递进去的维数,生成对应维数的0矩阵,单数矩阵中的元素不为0只是接近0

empty_like()方法按照传递进去的矩阵,生成对应维数的0矩阵,这里元素都为0

eye()和identity()需要传递进去一个整数,代表维数,这里生成的是对应维数的单位矩阵

***()与***_like()方法类似。

2.4.2------从已有数组(矩阵)中生成

  • array(object[, dtype, copy, order, subok, ndmin])

  • asarray(a[, dtype, order])

a = np.array([[1,2,3],[4,5,6]])
# 从现有的数组当中创建
a1 = np.array(a)
# 相当于索引的形式,并没有真正的创建一个新的
a2 = np.asarray(a)
print(a1)
print(a2)

[[1 2 3]
 [4 5 6]]
[[1 2 3]
 [4 5 6]]

解释:array()和asarray() 的区别

相同:array和asarray都可以将数组转化为ndarray对象

区别:当参数为一般数组时,两个函数都会开辟新的内存来存放copy的数组或矩阵;

当参数本身就是ndarray类型时,array会新建一个ndarray对象,作为参数的副本,但是asarray不会新建,而是与参数共享同一个内存。

2.4.3------生成固定范围的数组

  • np.linspace (start, stop, num, endpoint, retstep, dtype)

参数说明:

start 序列的起始值
stop 序列的终止值,
如果endpoint为true,该值包含于序列中
num 要生成的等间隔样例数量,默认为50
endpoint 序列中是否包含stop值,默认为ture
retstep 如果为true,返回样例,
以及连续数字之间的步长
dtype 输出ndarray的数据类型

代码上见

a = np.linspace(0,100,50)
print(a)

[  0.           2.04081633   4.08163265   6.12244898   8.16326531
  10.20408163  12.24489796  14.28571429  16.32653061  18.36734694
  20.40816327  22.44897959  24.48979592  26.53061224  28.57142857
  30.6122449   32.65306122  34.69387755  36.73469388  38.7755102
  40.81632653  42.85714286  44.89795918  46.93877551  48.97959184
  51.02040816  53.06122449  55.10204082  57.14285714  59.18367347
  61.2244898   63.26530612  65.30612245  67.34693878  69.3877551
  71.42857143  73.46938776  75.51020408  77.55102041  79.59183673
  81.63265306  83.67346939  85.71428571  87.75510204  89.79591837
  91.83673469  93.87755102  95.91836735  97.95918367 100.        ]

--------------------------------------------------------------
  • numpy.arange(start,stop, step, dtype)
  • 参数说明:从start开始,到stop结束,步长为step

代码上见:

a = np.arange(0,100,2)
print(a)

[ 0  2  4  6  8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46
 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94
 96 98]

2.4.4------生成随机数组成的数组

  • np.random模块

np.random.rand(d0d1...dn)------返回[0.0,1.0)内的一组均匀分布的数,参数是产生的数组的维数。

np.random.randn(d0, d1, …, dn)------功能:从标准正态分布中返回一个或多个样本值

a = np.random.rand(3,2)
print(a)
b = np.random.randn(4,2)
print(b)


[[0.47018098 0.53773488]
 [0.44468209 0.14701938]
 [0.44349829 0.90800236]]
--------------------------
[[-1.58174979 -0.8541224 ]
 [ 0.3468391  -2.68307933]
 [-0.5132048   1.19656033]
 [ 0.96606693  0.16333828]]

              ------------------------------------------------------------------------------------------------------------------------------------------------

有志者 事竟成 百二秦关终属楚

苦心人 天不负 三千越甲可吞吴 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3------NumPy学习(一) 的相关文章

  • Python3-基础- 包、闭包

    包 包 包是模块的一种形式 包的本质就是含有 py文件的文件夹 模块 模块就是封装好的具有特定功能的函数代码 例如sum 求和函数 py文件的两种功能 1 脚本 一个文件就是完整的程序 用来直接执行 2 模块 一个文件中存放的某些功能函数
  • Python学习笔记(十):包、模块

    一 包 模块 Python中的包相当于文件夹 模块就是 py文件 不同包下有相同名称的模块时 为了区分 可在模块里加上 包名 模块名 路径 这个路径叫做命名空间 注 如果想让一个普通的文件夹变为包 则需要在这个文件夹内添加 init py文
  • Python3数据挖掘之百度资讯搜索数据并入库(最新)

    因百度搜索页关键字内容改变 更新关键字增加正则表达式的编写 增加对批量内容爬取后的入库操作 另外需要注意学会修改正则里面变更后的内容 下面截图使用不同的颜色简单说明下 import requests import re import pym
  • Win7平台Python3使用impyla连接Hive遇到的坑

    环境硬件配置及Hadoop Hive版本 此博客置顶文章中有 安装步骤 pip install pure sasl Looking in indexes https pypi tuna tsinghua edu cn simple Coll
  • 【2019.05.26】JS逆向——破解 企名片 参数(encrypt_data)爬虫 超级详细

    参考这个博客 作者写的很流畅 一看就是个大佬 要向大佬学习 企名片地址 要获取图中数据 分析请求 根据大佬博客的点拨 我们可以知道这个网站的数据都在这个参数当中 要获取这些数据 我们需要这个网页是怎么把这一段参数解析的 解析参数 encry
  • selenium webdriver 开启网页失败,被发现为爬虫,的解决办法

    1 换用火狐浏览器 2 隐藏谷歌浏览器中的特殊变量值 from selenium import webdriver options webdriver ChromeOptions 防止被检测 旧版本用法 1 chrome在79版之前用这个
  • python openpyxl的简单使用和设置单元格背景色

    def pyxl execl import openpyxl wb openpyxl Workbook ws wb active ws title 麦嘎 data 1 2 3 4 djdj dkdk djdj 23 98 dk kdkd f
  • Python3之lambda表达式和三元运算符

    lambda表达式 lambda表达式 通常是在需要一个函数 但是又不想费神去命名一个函数的场合下使用 也就是指匿名函数 lambda是一个表达式而不是一个语句 lambda用来编写简单的函数 不会再重复利用的函数 而def用来处理强大的任
  • 详细!PyCharm连接MySQL数据库教程+心得

    一家懂得用细节留住客户的3年潮牌老店我必须支持 luyao1931 第一步 安装MySQL 下载地址 https dev mysql com downloads mysql 下载完后 我们将 zip 包解压到相应的目录 这里我将解压后的文件
  • 神经网络模型量化

    量化模型 Quantized Model 是一种模型加速 Model Acceleration 方法的总称 包括二值化网络 Binary Network 三值化网络 Ternary Network 深度压缩 Deep Compression
  • _signature、a_bogus、X-Bogus、msToken生成【2023.8.24】全站通用a-bogus

    本文以教学为基准 本文提供的可操作性不得用于任何商业用途和违法违规场景 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任 包含关注 点赞等 没露任何版权请审核员认真对待谢谢 2022 12
  • selenium webdriver一种解决打开chrome浏览器的过程

    1 下载59或58版本的Chrome浏览器 下载地址 http www pc6 com SoftView SoftView 22726 html 2 下载对应的驱动 驱动下载地址如下 当前我使用的版本是2 32 http npm taoba
  • pymysql中 execute 和 executemany 性能对比,以及与原生SQL 相比如何

    今天在mysql中插入大批量数据时 突然想起pymysql 还有executemany 方法 那么这两个方法到底谁快 快多少 测试环境 python3 mysql pymysql 老规矩 先上测试代码 class IN sql def in
  • python3 模块、import、from import

    模块 1 模块就是 py后缀的文件 2 py文件类似于一个类 包含以下部分 1 导入 一般的类都有导入 2 变量 对应类的属性 3 函数 对应类的方法 4 类 对应内部类 5 if name main 对应主函数 6 顶格写的代码段 对应构
  • Python3安装包下载(附3.8.7、3.7.9、3.6.8版本)

    三部曲 1 到 源码 网站源码 源码下载 源码之家 站长下载 搜索 Python 并下载 搜索结果在较底部 2 到官网 https www python org downloads 对应版本的页面 如 https www python or
  • Python3 如何优雅地使用正则表达式(详解四)

    更多强大的功能 到目前为止 我们只是介绍了正则表达式的一部分功能 在这一篇中 我们会学习到一些新的元字符 然后再教大家如何使用组来获得被匹配的部分文本 更多元字符 还有一些元字符我们没有讲到 接下来小甲鱼一一为大家讲解 有些元字符它们不匹配
  • Python3之爬虫----retrying模块的使用和处理cookie相关的请求

    1 1 设使用超时参数 requests get url headers headers timeout 3 设置超时参数 若url在三秒内未得到响应 报错 1 2 retrying模块的使用 第三方模块 from retrying imp
  • Python3之异常with语句

    高级语法之异常with 语法 with 表达式1 as 变量1 表达式2 as 变量2 语句块 with的作用 使用于对资源进行访问的场合 确保使用过程中不管是否发生异常都会执行必须的 清理 操作 并释放资源 如 文件打开后自动关闭 线程中
  • Python(4)list和tuple(类似js里的数组)

    6 list list其实就是js里的数组 放置在中括号里 用逗号分隔 就是数组的元素 例如 foo 1 2 3 print foo 1 2 3 len 访问list的长度 foo 1 2 3 print len foo 3 list n
  • centos7 pip3 安装python模块包报错解决

    centos7 pip3 安装python模块包报错 bash usr local bin pip3 usr local bin python3 6 坏的解释器 没有那个文件或目录 root localhost Python pip3 in

随机推荐

  • 在win10上安装go语言环境

    1 下载go环境安装包 由于官方的安装包可能很多人没办法下载到 但是可以在https golang google cn dl 下载 2 选择windows64位版下载 3 安装go 一直next 可以改文件路径 4 设置开发环境变量 右键此
  • 绝对布局优势_小米价值回归,IoT领域的规模优势和持续投入是关键

    进入2020年 手机行业特别是国内市场的竞争已经接近尾声 作为稳居全球出货量第四的小米而言 国内市场的表现并不令人满意 不过 从去年10月份开始 小米公司的股价却一直呈现出不错的上涨势头 消费者和市场逐渐认可了小米的价值 并且这种认可的趋势
  • leetcode150–逆波兰表达式求值(栈/后缀表达式)

    根据 逆波兰表示法 求表达式的值 有效的算符包括 每个运算对象可以是整数 也可以是另一个逆波兰表达式 说明 整数除法只保留整数部分 给定逆波兰表达式总是有效的 换句话说 表达式总会得出有效数值且不存在除数为 0 的情况 示例 输入 toke
  • 解决执行shell命令时出现argument list too long错误的问题

    如果执行shell命令时出现argument list too long的错误 其原因是需要操作的目标文件过多 比如超过2万个文件 解决方式就是分批甚至逐个处理目标文件 1 grep命令 命令行执行 grep Java l 如果返回 zsh
  • 三角形

    Description 一天mingming问了Flying一个数学问题 给出一个整数 存在多少个直角三角 它的某一条边等于这个整数 而且其它边也是整数 Flying是做ACM的 他就写了个程序解决了这个问题 你也能写个程序解决吗 Inpu
  • 调试设置断点出现:当前不会命中断点还未为文档加载任何符号

    第一种情况 大多数 检查VS的调试模式 VS的调试分为两种 Debug和Release Debug是专门真对检查程序的bug而设置的一种模式 Release模式对程序的编译进行了优化 一般用于程序发布 首先确保是在Debug模式下设置的断点
  • win10安装hdf5,C++读写h5文件测试(一)

    前言 在TensorFlow训练好的数据模型 需要放到C 中使用 也就是将 h5文件中的数据拿出来 读入内存 然后读入图片 用模型数据去预测图像 得出结果 下面按照需求 如何去读取 h5 的数据 进行操作 下载 选择 HDF5 1 8 18
  • 一分钟解决Android调用系统分享给微信,出现分享失败,分享多文件必须为图片格式

    解决Android调用系统分享图片给微信 出现分享失败 分享多文件必须为图片格式 近期应公司需求 分享多图片到微信的功能 之前一直是用微信自己家SDK实现分享 但是查看微信的原生SDK是不具备多图分享的 在网上查找解决办法 直接调用手机系统
  • 提示ModuleNotFoundError: No module named ‘flask‘

    如果你运行 Python 代码时出现了 ModuleNotFoundError No module named flask 的错误提示 这意味着 Python 解释器无法找到 Flask 模块 通常 这个错误是由以下几个原因造成的 Flas
  • 网易云音乐UI界面

    网易云音乐UI界面 接着上期的网易云音乐搜索和下载 现在再添加一个功能 用pyqt5制作一个UI界面 效果展示 主窗口中有个控件 行编辑输入框 搜索按钮 表格 代码 class MyQLabel QLabel 自定义标签 自定义信号 cli
  • IDA调试小技巧

    IDA脚本 MakeNameEX IDA官方链接 实际运用 MakeNameEX MakeNameEx long ea string name long flags SN CHECK ea linear address name new n
  • Harbor使用HTTPS访问

    说明 本脚本只创建密钥 脚本是借鉴所有各个大神 自己重新书写一份 官方的已经写的狠清楚了 直接粘贴过来变一些变量就可以了 如有不对 欢迎指正 binsh Date 2021 6 25 Author Desc Harbor v2 2 1 Th
  • 使用Pycharm快速在字典中添加单引号

    选中要添加单引号的数据 使用Ctrl R快捷键打开Pycharm中的正则表达式 输入 1 2 选中一些配置选项 Match case Regex Search in Selection 点击Replace All即可
  • 【华为OD机试真题 JAVA】欢乐的周末

    JS版 华为OD机试真题 JS 欢乐的周末 标题 欢乐的周末 时间限制 1秒 内存限制 262144K 语言限制 不限 小华和小为是很要好的朋友 他们约定周末一起吃饭 通过手机交流 他们在地图上选择了多个聚餐地点 由于自然地形等原因 部分聚
  • python与C语言socket通信--发送、接收(解析)结构体数据

    from importlib resources import path import socket import struct import ctypes import time os tcp socket socket socket s
  • 利用STM32的FLASH模拟 EEPROM(F103)系列

    STM32的FLASH是用来存储主程序的 ST公司为了节约成本 没有加入 EEPROM 但是许多场合下我们需要用EEPROM 不过FLASH的容量还是可观的 我们可以利用FLASH模拟EEPROM 根据 STM32F10X闪存编程 中的介绍
  • 几十条业务线日志系统如何收集处理?

    在互联网迅猛发展的今天 各大厂发挥十八般武艺的收集用户的各种信息 甚至包括点击的位置 我们也经常发现自己刚搜完一个东西 再打开网页时每个小广告都会出现与之相关联的商品或信息 在感叹智能的同时不惊想 什么时候泄露的行踪 许多公司的业务平台每天
  • 关于Xshell7无法连接虚拟机的解决方案

    当我们在使用Xshell时 无法连接虚拟机 解决方法1 1 打开网络和Internet设置 2 点击更改适配器设置 3 如果发现是禁用则右键启动 解决方法二 1 如果都启动仍然连接不上 我们双击打开后 点击详细信息 发现是自动配置IPv4地
  • AR/MR技术作业

    1 图片识别与建模 环境配置 首先 在官网上注册账号 在Download页面下载相应的SDK安装到unity安装目录获取Vuforia支持 如下 然后 打开Develop页面 点击Get Development Key 然后 注册一个Lic
  • Python3------NumPy学习(一)

    NumPy学习 1 NumPy介绍 Numpy Numerical Python 是一个开源的Python科学计算库 用于快速处理任意维度的数组 Numpy支持常见的数组和矩阵操作 对于同样的数值计算任务 使用Numpy比直接使用Pytho