📋 博主简介
- 💖 作者简介:大家好,我是wux_labs。😜
热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。
通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP)、TiDB数据库认证SQL开发专家(PCSD)认证。
通过了微软Azure开发人员、Azure数据工程师、Azure解决方案架构师专家认证。
对大数据技术栈Hadoop、Hive、Spark、Kafka等有深入研究,对Databricks的使用有丰富的经验。- 📝 个人主页:wux_labs,如果您对我还算满意,请关注一下吧~🔥
- 📝 个人社区:数据科学社区,如果您是数据科学爱好者,一起来交流吧~🔥
- 🎉 请支持我:欢迎大家 点赞👍+收藏⭐️+吐槽📝,您的支持是我持续创作的动力~🔥
《PySpark大数据分析实战》-19.NumPy介绍ndarray介绍
- 《PySpark大数据分析实战》-19.NumPy介绍ndarray介绍
- 前言
- 数学计算库NumPy介绍
- 多维数组对象ndarray
- 数组的访问
- 结束语
《PySpark大数据分析实战》-19.NumPy介绍ndarray介绍
前言
大家好!今天为大家分享的是《PySpark大数据分析实战》第3章第2节的内容:NumPy介绍ndarray介绍。
图书在:当当、京东、机械工业出版社以及各大书店有售!
数学计算库NumPy介绍
NumPy(Numerical Python)是Python中科学计算的基础包,是用于科学计算和数值分析的一个重要库。它提供了多维数组对象(ndarray),各种派生对象,以及用于数组快速操作的通用函数、线性代数、傅里叶变换、随机数生成等功能,是Python科学计算中必不可少的库。要在项目中使用NumPy,需要在Python环境中安装NumPy,命令如下:
$ pip install numpy
在使用时需要在Python脚本中导入numpy,以及其他必要的包,代码如下:
import numpy as np
import random
import time
多维数组对象ndarray
NumPy包的核心是ndarray对象,它封装了Python原生的相同数据类型的N维数组。ndarray是NumPy中用于存储和处理数据的核心数据结构,支持向量化计算和广播等操作。为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的。
创建一个ndarray对象就和创建Python本地list对象一样简单,在NumPy中创建一维数组可以使用numpy.array()函数,这个函数可以接受一个集合对象,如列表或元组,将其转换为一维数组。下面的案例中创建了一个一维数组,代码如下:
ary1 = np.array([1,2,3,4,5,6,7,8,9])
NumPy专门针对ndarray的操作和运算进行了设计,数组的存储效率和输入输出性能远优于Python中的集合,数组越大,NumPy的优势就越明显。下面的案例中,创建了一个包含1亿个随机数的集合,分别用本地集合对象和ndarray对象对元素求和,比较两种方式的耗时,代码如下:
lst1 = []
for i in range(100000000):lst1.append(random.random())# 使用Python原生list进行运算
t1 = time.time()
sum1 = sum(lst1)
t2 = time.time()# 使用ndarray进行运算
ary2 = np.array(lst1)
t3 = time.time()
sum2 = np.sum(ary2)
t4 = time.time()# 考察两种方式的处理时间
print(t2 - t1, '---', t4 - t3)
执行代码,输出结果如下:
0.9900028705596924 --- 0.13501548767089844
可以看到,ndarray的计算速度快很多。相对于Python中的集合,ndarray有一些优势:
- ndarray存储的是相同类型的数据,在内存中是连续存储的。
- ndarray支持并行化运算。
- NumPy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于Python代码。
在NumPy中创建一个N维数组也是使用numpy.array()函数,在下面的案例中创建了一个二维数组,代码如下:
ary3 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
数组的访问
ndarray对象的元素可以通过索引、切片、迭代等方式进行访问和修改,这和Python本地集合的访问方式类似。在下面的案例中,分别通过索引、切片等方式访问元素,代码如下:
print("通过索引获取元素:", ary1[2])
print("通过切片获取元素:", ary1[2:7])
print("对元素进行迭代:", [x * 2 for x in ary1])
执行代码,输出结果如下:
通过索引获取元素: 3
通过切片获取元素: [3 4 5 6 7]
对元素进行迭代: [2, 4, 6, 8, 10, 12, 14, 16, 18]
结束语
好了,感谢大家的关注,今天就分享到这里了,更多详细内容,请阅读原书或持续关注专栏。