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学习(一) 的相关文章

  • 【2019.05】JS逆向——破解百度翻译参数(sign)爬虫 超级详细

    有时间了打算把有道 百度 Google翻译都搞一遍 填坑百度翻译 这篇与有道那篇操作基本一致 有可能写的没有那篇清楚 大家也可以观摩一下上一篇 2019 05 JS逆向 破解有道翻译爬虫参数 sign 一 分析请求参数 打开地址 https
  • Python3之lambda表达式和三元运算符

    lambda表达式 lambda表达式 通常是在需要一个函数 但是又不想费神去命名一个函数的场合下使用 也就是指匿名函数 lambda是一个表达式而不是一个语句 lambda用来编写简单的函数 不会再重复利用的函数 而def用来处理强大的任
  • 解决Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“报错

    Microsoft Visual C 14 0 or greater is required Get it with Microsoft C Build Tools 具体报错如下 Building wheel for cyac pyproj
  • 使用 selenium 连接已经打开的 chrome 浏览器

    1 方法一 新建文件夹test 进入chrome exe 目录 打开CMD 输入 chrome exe remote debugging port 9999 user data dir D test 弹出 浏览器框 pycharm运行脚本如
  • python-6-for循环及格式化输出format三种用法

    前言 循环我们前面讲过了无限循环 那么for循环属于什么循环呢 显然就是有限循环 另外格式化输出我们前面也讲过 但是format也能做到不一样的格式化输出 一起看看吧 一 for 循环 1 for 有限循环 for 有限循环 s 123as
  • Opencv-python3,处理rtsp流视频-----踩坑总结+VideoCapture.get()详解:

    最近项目在用opencv处理rtsp流相机 中间也踩了很多坑 这里写篇博客帮助那些可能会遇到相似问题的同胞 注 我这里同时用到了四个相机 1 电脑同时连接多个相机后 之后去打开rtsp相机时 初次打开特别耗时 甚至打开失败 在Win10上需
  • Python绘制三角函数图(sin\cos\tan)并标注特定范围

    根据我们指定的条件检索函数中的元素 import matplotlib pyplot as plt import numpy as np a np linspace 0 2 np pi 50 b np sin a plt plot a b
  • python连接clickhouse使用方法

    前沿 clickhouse现在作为分布式存储成熟的解决方案 在python开发中经常会用到clickhouse的连接方案 下面所列一个简单的连接clickhouse的写法 正文 from clickhouse driver import C
  • Linux内存精确统计工具

    1 ps mem介绍 ps mem是一个可以帮助我们精确获取 Linux 中各个程序核心内存使用情况的简单python脚本 它会分别计算一个程序私有内存总量和共享内存总量 并以更准确的方式给出了总的内存使用量 2 安装方式 包管理器 pip
  • Python3 数据挖掘系统搭建(四)

    上一节学习了数据清洗如何对内容去重 这一节继续学习一个完整的挖掘系统是怎么构建的 以搜索百度新闻数据为例 首先要建立评分系统需要创建一个数据表 起名为article吧 字段如下图 字段有company title href source d
  • python3 模块、import、from import

    模块 1 模块就是 py后缀的文件 2 py文件类似于一个类 包含以下部分 1 导入 一般的类都有导入 2 变量 对应类的属性 3 函数 对应类的方法 4 类 对应内部类 5 if name main 对应主函数 6 顶格写的代码段 对应构
  • Python3 PyQt5 实现文件打开及保存

    coding utf 8 Form implementation generated from reading ui file filemanage ui Created by PyQt5 UI code generator 5 12 2
  • python3 with.py

    模块 python3 with py 参考 https docs python org zh cn 3 reference compound stmts html with https docs python org zh cn 3 ref
  • Python3 如何优雅地使用正则表达式(详解四)

    更多强大的功能 到目前为止 我们只是介绍了正则表达式的一部分功能 在这一篇中 我们会学习到一些新的元字符 然后再教大家如何使用组来获得被匹配的部分文本 更多元字符 还有一些元字符我们没有讲到 接下来小甲鱼一一为大家讲解 有些元字符它们不匹配
  • yum出现Error downloading packages错误

    yum出现Error downloading packages错误 错误表现方式 yum可以list 可以clean cache 但是无法安装 错误提示 Downloading packages Error downloading pack
  • python3 练习题100例 (十二)

    题目十二 打印出所有的 水仙花数 所谓 水仙花数 是指一个三位数 其各位数字立方和等于该数本身 例如 153是一个 水仙花数 因为153 1的三次方 5的三次方 3的三次方 usr bin env python3 coding utf 8
  • Python3 初学 DAY2

    num1 minute py minute 7 24 60 print minute num2 print py 注 显示颜色格式 033 显示方式 字体色 背景色m 033 0m 显示颜色参数 显示方式 效果 字体色 背景色 颜色描述 0
  • python3 No module named 'PIL'

    在python3 scrapy框架已经安装好的情况下 还是出现了 python3 No module named PIL 在Python3下 PIL已经被Pillow替代了 所以只需要安装Pillow就可以了 使用命令 pip3 insta
  • Python3 如何优雅地使用正则表达式(详解五)

    非捕获组命名组 精心设计的正则表达式可能会划分很多组 这些组不仅可以匹配相关的子串 还能够对正则表达式本身进行分组和结构化 在复杂的正则表达式中 由于有太多的组 因此通过组的序号来跟踪和使用会变得困难 有两个新的功能可以帮你解决这个问题 非
  • 如何在 CentOS/RHEL 8 上安装 Python 3.9

    Python 是一种功能强大且广泛使用的编程语言 以其简单性 可读性和跨 Web 开发 数据科学和机器学习等各个领域的多功能性而闻名 随着 Python 3 9 的发布 开发人员可以从众多增强 优化和新功能中受益 在本教程中 我们将指导您完

随机推荐

  • 在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