《Python数据分析》一2.11 NumPy数组的广播

简介:

本节书摘来自异步社区《Python数据分析》一书中的第2章,第2.11节,作者【印尼】Ivan Idris,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.11 NumPy数组的广播

当操作对象的形状不一样时,NumPy会尽力进行处理。

例如,假设一个数组要跟一个标量相乘,这时标量需要根据数组的形状进行扩展,然后才可以执行乘法运算。这个扩展的过程叫做广播(broadcasting)。下面用代码(详见本书代码包中的broadcasting.py文件)加以说明:

import scipy.io.wavfile
import matplotlib.pyplot as plt
import urllib2
import numpy as np
response = 
urllib2.urlopen('http://www.thesoundarchive.com/austinpowers/smash 
ingbaby.wav')
print response.info()
WAV_FILE = 'smashingbaby.wav'
filehandle = open(WAV_FILE, 'w')
filehandle.write(response.read())
filehandle.close()
sample_rate, data = scipy.io.wavfile.read(WAV_FILE)
print "Data type", data.dtype, "Shape", data.shape
plt.subplot(2, 1, 1)
plt.title("Original")
plt.plot(data)
newdata = data * 0.2
newdata = newdata.astype(np.uint8)
print "Data type", newdata.dtype, "Shape", newdata.shape
scipy.io.wavfile.write("quiet.wav",
 sample_rate, newdata)
plt.subplot(2, 1, 2)
plt.title("Quiet")
plt.plot(newdata)
plt.show()

下面,我们将下载一个音频文件,然后以此为基础,生成一个新的静音版本。

1.读取WAV文件。

我们将使用标准的Python代码来下载电影《王牌大贱谍》(Austin Powers)中的狂嚎式的歌曲Smashing, baby。SciPy中有一个wavfile子程序包,可以用来加载音频数据,或者生成WAV格式的文件。如果此前已经安装了SciPy,那么现在就可以直接使用这个子程序包了。我们可以使用函数read()读取文件,它返回一个数据阵列及采样率,不过,我们这里只对数据本身感兴趣。

sample_rate, data = scipy.io.wavfile.read(WAV_FILE)

2.绘制原WAV数据。

这里,我们利用matplotlib绘制原始WAV数据,并用一个子图来显示标题“Original”,代码如下所示:

plt.subplot(2, 1, 1)
plt.title("Original")
plt.plot(data)

3.新建一个数组。

现在,我们要用NumPy来生成一段“寂静的”声音。实际上,就是将原数组的值乘以一个常数,从而得到一个新数组,因为这个新数组的元素值肯定是变小了。这正是广播技术的用武之地。最后,我们要确保新数组与原数组的类型一致,即WAV格式。

newdata = data * 0.2
newdata = newdata.astype(np.uint8)

4.写入一个WAV文件中。

将新数组保存到一个新的WAV文件中,代码如下:

scipy.io.wavfile.write("quiet.wav",
  sample_rate, newdata)

5.绘制出新的WAV数据。

可以使用matplotlib来画出新数组中的数据,如下所示:

plt.subplot(2, 1, 2)
plt.title("Quiet")
plt.plot(newdata)
plt.show()

6.图2-8展示了原始的WAV文件中的数据的图像,以及数值变小后的新数组的图像。


1bbe842be053ac5fae52036faaa6f4909a4ffb20
相关文章
|
9月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
716 1
|
10月前
|
数据采集 数据可视化 数据挖掘
Python数据分析实战:Pandas处理结构化数据的核心技巧
在数据驱动时代,结构化数据是分析决策的基础。Python的Pandas库凭借其高效的数据结构和丰富的功能,成为处理结构化数据的利器。本文通过真实场景和代码示例,讲解Pandas的核心操作,包括数据加载、清洗、转换、分析与性能优化,帮助你从数据中提取有价值的洞察,提升数据处理效率。
483 3
|
9月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
419 0
|
12月前
|
数据采集 数据可视化 搜索推荐
Python数据分析全流程指南:从数据采集到可视化呈现的实战解析
在数字化转型中,数据分析成为企业决策核心,而Python凭借其强大生态和简洁语法成为首选工具。本文通过实战案例详解数据分析全流程,涵盖数据采集、清洗、探索、建模、可视化及自动化部署,帮助读者掌握从数据到业务价值的完整技能链。
1341 0
|
9月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
10月前
|
数据可视化 数据挖掘 大数据
基于python大数据的水文数据分析可视化系统
本研究针对水文数据分析中的整合难、分析单一和可视化不足等问题,提出构建基于Python的水文数据分析可视化系统。通过整合多源数据,结合大数据、云计算与人工智能技术,实现水文数据的高效处理、深度挖掘与直观展示,为水资源管理、防洪减灾和生态保护提供科学决策支持,具有重要的应用价值和社会意义。
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
11月前
|
存储 数据挖掘 大数据
基于python大数据的用户行为数据分析系统
本系统基于Python大数据技术,深入研究用户行为数据分析,结合Pandas、NumPy等工具提升数据处理效率,利用B/S架构与MySQL数据库实现高效存储与访问。研究涵盖技术背景、学术与商业意义、国内外研究现状及PyCharm、Python语言等关键技术,助力企业精准营销与产品优化,具有广泛的应用前景与社会价值。
|
11月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
1011 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
11月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
822 0

推荐镜像

更多