《PySpark大数据分析实战》-19.NumPy介绍ndarray介绍

PySpark实战:NumPy的ndarray介绍及性能提升,
本文介绍了NumPy库及其ndarray对象在PySpark大数据分析中的应用,包括ndarray的创建、性能优势、数组访问方法,并展示了ndarray在高效计算方面的特点。

📋 博主简介

  • 💖 作者简介:大家好,我是wux_labs。😜
    热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。
    通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP)、TiDB数据库认证SQL开发专家(PCSD)认证。
    通过了微软Azure开发人员、Azure数据工程师、Azure解决方案架构师专家认证。
    对大数据技术栈Hadoop、Hive、Spark、Kafka等有深入研究,对Databricks的使用有丰富的经验。
  • 📝 个人主页:wux_labs,如果您对我还算满意,请关注一下吧~🔥
  • 📝 个人社区:数据科学社区,如果您是数据科学爱好者,一起来交流吧~🔥
  • 🎉 请支持我:欢迎大家 点赞👍+收藏⭐️+吐槽📝,您的支持是我持续创作的动力~🔥

《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]

结束语

好了,感谢大家的关注,今天就分享到这里了,更多详细内容,请阅读原书或持续关注专栏。

### 将 `ulab.numpy.ndarray` 数据转换为图像文件或可视化图像 在使用 `ulab.numpy.ndarray` 处理图像数据时,通常需要将数据转换为可视化的图像文件(如 PNG、JPEG 等)。由于 `ulab` 是一个轻量级的 NumPy 实现,其功能相较于标准的 NumPy 和 SciPy 有所简化,因此在图像处理方面可能需要结合其他库或手动操作来实现图像的保存和显示。 #### 图像数据格式转换 在处理图像数据时,通常会以 `RGB888` 格式存储,即每个像素由三个 8 位整数表示红、绿、蓝三个通道的颜色值。如果 `ulab.numpy.ndarray` 中存储的是图像数据,可以尝试将其转换为标准的 `numpy.ndarray` 格式,然后使用如 `PIL`(Python Imaging Library)中的 `Image` 模块进行图像的创建和保存[^2]。 以下是一个将 `ulab.numpy.ndarray` 转换为图像并保存的示例: ```python import ulab.numpy as np from PIL import Image # 假设 img 是一个 ulab.numpy.ndarray 类型的图像数据,形状为 (height, width, 3) img_data = np.random.randint(0, 256, (100, 100, 3)) # 示例数据 # 将 ulab.numpy.ndarray 转换为 numpy.ndarray img_array = np.array(img_data) # 创建图像对象 image = Image.fromarray(img_array.astype('uint8'), 'RGB') # 保存图像 image.save('output_image.png') ``` 在这个示例中,首先生成了一个随机的 `ulab.numpy.ndarray` 数据作为图像数据的替代,然后将其转换为 `numpy.ndarray` 类型,并使用 `Image.fromarray()` 方法创建了一个图像对象,最后调用 `save()` 方法将图像保存为 `output_image.png` 文件。 #### 图像可视化 除了将图像数据保存为文件外,还可以通过 `matplotlib` 等库实现图像的可视化显示。以下是一个使用 `matplotlib.pyplot` 显示图像的示例: ```python import matplotlib.pyplot as plt # 显示图像 plt.imshow(img_array) plt.show() ``` 这里,`plt.imshow()` 方法用于显示图像数据,而 `plt.show()` 则用于展示图像窗口。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wux_labs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值