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就可以正常显示啦。

目录
相关文章
|
3天前
|
机器学习/深度学习 分布式计算 物联网
【Python机器学习专栏】联邦学习:保护隐私的机器学习新趋势
【4月更文挑战第30天】联邦学习是保障数据隐私的分布式机器学习方法,允许设备在本地训练数据并仅共享模型,保护用户隐私。其优势包括数据隐私、分布式计算和模型泛化。应用于医疗、金融和物联网等领域,未来将发展更高效的数据隐私保护、提升可解释性和可靠性的,并与其他技术融合,为机器学习带来新机遇。
|
3天前
|
机器学习/深度学习 自然语言处理 搜索推荐
【Python机器学习专栏】迁移学习在机器学习中的应用
【4月更文挑战第30天】迁移学习是利用已有知识解决新问题的机器学习方法,尤其在数据稀缺或资源有限时展现优势。本文介绍了迁移学习的基本概念,包括源域和目标域,并探讨了其在图像识别、自然语言处理和推荐系统的应用。在Python中,可使用Keras或TensorFlow实现迁移学习,如示例所示,通过预训练的VGG16模型进行图像识别。迁移学习提高了学习效率和性能,随着技术发展,其应用前景广阔。
|
3天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习中的Bagging与Boosting
【4月更文挑战第30天】本文介绍了集成学习中的两种主要策略:Bagging和Boosting。Bagging通过自助采样构建多个基学习器并以投票或平均法集成,降低模型方差,增强稳定性。在Python中可使用`BaggingClassifier`实现。而Boosting是串行学习,不断调整基学习器权重以优化拟合,适合弱学习器。Python中可利用`AdaBoostClassifier`等实现。示例代码展示了如何在实践中运用这两种方法。
|
3天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】关联规则学习:Apriori算法详解
【4月更文挑战第30天】Apriori算法是一种用于关联规则学习的经典算法,尤其适用于购物篮分析,以发现商品间的购买关联。该算法基于支持度和置信度指标,通过迭代生成频繁项集并提取满足阈值的规则。Python中可借助mlxtend库实现Apriori,例如处理购物篮数据,设置支持度和置信度阈值,找出相关规则。
|
3天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习算法的原理与应用
【4月更文挑战第30天】集成学习通过组合多个基学习器提升预测准确性,广泛应用于分类、回归等问题。主要步骤包括生成基学习器、训练和结合预测结果。算法类型有Bagging(如随机森林)、Boosting(如AdaBoost)和Stacking。Python中可使用scikit-learn实现,如示例代码展示的随机森林分类。集成学习能降低模型方差,缓解过拟合,提高预测性能。
|
4天前
|
数据采集 Web App开发 数据可视化
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
|
5天前
|
Python
【Python21天学习挑战赛】- 错误和异常
【Python21天学习挑战赛】- 错误和异常
|
5天前
|
容器
【Python21天学习挑战赛】-迭代器 & f-格式化 & 模块
【Python21天学习挑战赛】-迭代器 & f-格式化 & 模块
|
5天前
|
Python
【Python21天学习挑战赛】- 函数进阶
【Python21天学习挑战赛】- 函数进阶
|
5天前
【Python21天学习挑战赛】文件读写操作
【Python21天学习挑战赛】文件读写操作