社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python之numpy数组学习(五)——广播

CDA数据分析师 • 9 年前 • 992 次点击  


作者   Airy
本文转自 AiryData,转载需授权


前言

前面我们学习了numpy库的很多知识,今天来学习下数组的广播。


Numpy数组的广播

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


假设一个数组要跟一个标量相乘,这时标量需要根据数组的形状进行扩展,然后才可以执行乘法运算。这个扩展的过程叫做广播(broadcasting)。


广播的步骤如下:


①  读取WAV文件

(本地没有找到好的直接下载WAV文件的网站,欢迎推荐)这里我们使用标准Python代码来下载《王牌大贱谍》中的歌曲Smashing,baby。Scipy中有一个wavfile子程序包,可以用来加载音频数据,或者生成WAV格式的文件。如果此前已安装了scipy,现在就可以直接用了。我们使用read()函数读取文件,它返回一个数据阵列及采样率,不过,我们这里只对数据本身感兴趣。


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


②  绘制原WAV数据

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


plt.subplot(2, 1, 1)

plt.title("Original")

plt.plot(data)


③  新建一个数组

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


newdata = data * 0.2

       newdata = newdata.astype(np.uint8)


④  写入一个WAV文件中。

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


scipy.io.wavfile.write("quiet.wav",

       sample_rate,newdata)


⑤  绘制出新的 WAV数据。

可以使用matplotlib来画出新数组中数据,代码如下:


plt.subplot(2, 1, 2)

plt.title("Quiet")

plt.plot(newdata)

 plt.show()


⑥  展现原始WAV数据图像和新数组的图像。

 下面用完整代码来说明一下:


#-*- coding:utf-8 -*-
import scipy.io.wavfile
import matplotlib.pyplot as plt
from urllib import request
import numpy as np

url = 'http://www.thesoundarchive.com/austinpowers/smashingbaby.wav'
response = request.urlopen(url)
print (response.info())
WAV_FILE = 'smashingbaby.wav'
#二进制方式打开
filehandle = open(WAV_FILE, 'wb+')
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()


小结

今天学习一下Python中numpy数组的广播。希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。


推荐阅读


我分析了 6.5W 字的歌词,看到了这样的周杰伦!

柯洁又输了,关于人工智能AlphaGo你需要知道些什么

男性人口过剩:亚洲性别比例失衡远比你想象中严重

【书单】18本数据科学家必读的R语言和Python相关书籍

如何像数据科学家一样思考

北京VS上海,哪座城市人口更多?

我是如何一不小心阻止了勒索病毒的全球蔓延

用python抓取摩拜单车API数据并做可视化分析(源码)

2017年大数据和数据科学的六大发展趋势

你每天要花多少时间在手机上?

初级数据科学家求职时的 3 大必备能力

不可错过的优质深度学习课程

职场 | 数据库面试常问的一些基本概念

听说你最擅长“拖”,你“拖”得过Excel吗?

数据科学优质课程推荐#2:统计入门课程篇

歌手外科和猴姑,大数据告诉你白百何出轨后谁最惨

想学习数据科学?我们整理了一份优质编程入门课程清单

数据科学家在美国仍然是最热门工作的3大原因

一个优秀数据分析师的准则



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/weixin/ENYaSl3Zuh
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2178