Python21day学习---numpy基础操作----day18

简介: Python21day学习---numpy基础操作----day18

一、Numpy 介绍

Numpy (Numerical Python) 是一个开源的 Python 科学计算库,用于快速处理任意维度的数组。 Numpy 支持常见的数组和矩阵操作。

对于同样的数值计算任务,使用 Numpy 比直接使用 Python 要简洁的多。

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

二、Ndarray 介绍

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

要存储八个同学的成绩

用 ndarray 进行存储:

import numpy as np
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]])
print(type(score),score)

返回结果:

<class 'numpy.ndarray'> [[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]]

三、Ndarray 与 Python 原生 list 运算效率对比

在这里我们通过一段代码运行来体会到 ndarray 的好处

import random
import time
import numpy as np
a = []
for i in range(100000000):
    a.append(random.random())
%time sum1=sum(a)
b=np.array(a)
%time sum2=np.sum(b)

输出结果为:

CPU times: user 1.82 s, sys: 17.8 s, total: 19.6 s
Wall time: 57.9 s
CPU times: user 189 ms, sys: 606 ms, total: 794 ms
Wall time: 2.04 s

 

从中我们看到 ndarray 的计算速度要快很多,节约了时间(57.9s降低到了2.04s)。

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

Numpy 专门针对 ndarray 的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于 Python 中的嵌套列表,数组越大,Numpy 的优势就越明显。

四、Ndarray 的优势

1.储存风格

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

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

2.并行化运算

ndarray 支持并行化运算(向量化运算)

3.底层语言

Numpy 底层使用 C 语言编写,内部解除了 GIL(全局解释器锁),其对数组的操作速度不受 Python 解释器的限制,效率远高于纯 Python 代码。

五,numpy的属性和类型

ndarray 的属性

数组属性反映了数组本身固有的信息。

ndarray.shape 数组维度的元组

ndarray.ndim 数组维数

ndarray.size 数组中的元素数量

ndarray.itemsize 一个数组元素的长度(字节)

ndarray.dtype 数组元素的类型

a=np.array([[1, 2, 3],[4, 5, 6]],dtype=np.float32)
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)

那么,现在的a,b,c数组分别是几维数组呢?有多少个中括号就是几维的数组哦,因此,a是二维数组,b是一维数组,c是三维数组。


       数组类型以及范围

np.bool 用一个字节存储的布尔类型(True 或 False) ‘b'

np.int8  
 一个字节大小,-128至127 'i'
np.int16  整数,-32768至32767 i2'
np.int32 整数,-231至232-1   ‘i4'
np.int64  整数,-263至263-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.complex128

复数,分别用两个64位浮点数

表示实部和虚部

'c16'
np.object_  python 对象  ‘O’ 
np.string_   字符串 ’S’
np.unicode_  unicode 类型 ’U’

建立一个数组,名称为d,指定类型为int16:

d=np.array([1,2,3,32767],dtype=np.int16)
print(d.dtype)
print(d)

也可以这样指定类型:

d=np.array([1,2,3,32800],dtype="i2")
print(d.dtype)
print(d)

但32800已经超过int16的范围了,因此,结果是错误的哦,结果如下:

int16
[     1      2      3 -32736]

修改i2为i8就可以正常显示啦。

目录
相关文章
|
17天前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
153 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
1天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
13 5
|
14天前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从0到1,精通Python使用
尼恩架构团队的大模型《LLM大模型学习圣经》是一个系统化的学习系列,初步规划包括以下内容: 1. **《Python学习圣经:从0到1精通Python,打好AI基础》** 2. **《LLM大模型学习圣经:从0到1吃透Transformer技术底座》**
Python学习圣经:从0到1,精通Python使用
|
17天前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
236 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
20天前
|
开发者 Python
Python学习九:file操作
这篇文章是关于Python文件操作的详细教程,包括文件的打开、读写、关闭,以及文件备份脚本的编写和文件定位操作。
16 2
|
20天前
|
Java C# Python
Python学习七:面向对象编程(中)
这篇文章是关于Python面向对象编程的中级教程,涵盖了析构函数、对象的三大特征(封装、继承、多态)、类属性与实例属性、以及类方法与静态方法的对比。
20 2
|
20天前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
17 1
|
20天前
|
存储 Java 编译器
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
这篇文章是关于Python编程语言中变量命名规则、基本数据类型、算数运算符、比较运算符、逻辑运算符、赋值运算符以及格式化输出与输入的详细教程。
18 0
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
|
20天前
|
资源调度 前端开发 JavaScript
Python学习二:Python包管理器pip
这篇文章介绍了Python包管理器pip的基本概念、基本操作、如何更改下载源为国内镜像以加速下载,以及如何指定安装包的位置。
18 0
Python学习二:Python包管理器pip
|
14天前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从入门到精通Python,打好 LLM大模型的基础
Python学习圣经:从0到1精通Python,打好AI基础