《Python数据科学入门》之数组变换(第5章)

Python数据科学入门

Dmitry Zinoviev著
熊子源 译


第5章 使用表格形式的数值数据

第22单元 转置和重排

Reshape(d0,d1…) 可以改变现有数组的形状,其参数定义了新的维度
属性T的值就是数组的转置视图:array.T
Transpose() 根据多维数组的参数来排列多维数组的部分或所有轴

第23单元 索引和切片

数组能实现布尔索引: 可以使用布尔值数组作为索引,其结果是原始数组中布尔索引为True的项构成的数组。通常,布尔数组是广播的结果。布尔索引既可以在左侧(用于匹配),也可以用于右侧(用于选择)。

布尔运算:
关系运算符(<,==)优先级低于位运算(&、!、|)

第24单元 广播

**广播:**数组上的矢量化操作
如果参与运算的两个数组维度相等或其中一个是标量。就可以将运算在两个维度“广播”。

在numpy和Python中星号运算符( * )具有不同的含义:

Python seq*5 将列表seq复制五次理解条件函数;
Numpy seq*5 将数组seq中的每一个元素乘以5。

通用函数round()对矩阵元素执行四舍五入操作。

第25单元 解密通用函数

Greater() 逐列比较数组的两行数据,返回值为True\False

第26单元 理解条件函数

where(c,a,b) 是numpy风格的if-else三元运算符。它通过一个布尔数组(c)和两个其他数组(a,b)得出数组d。数组d满足:如果c[i]为真,则d[i]=a[i],否则d[i]=b[i]。

第27单元 数组的聚合与排序

cumsum() 计算累积和
cumprod() 计算乘积量
sort() 将数组进行排序

第28单元 将数组用作集合

unique(X) 返回X中所用唯一元素组成的数组。它是counter模块的一个很好的替代品,但它并未真正计算数组中元素出现的次数。
in1d(needle,haystack) 返回一个布尔数组,如果needle的元素在haystack中,返回数组的对应位置元素为True。
union1d() 计算一维数组的并集
intersect1d() 计算一维数组的交集

第29单元 数组的保存和读取

如果文件名以.gz结尾,numpy甚至可以自动压缩和解压文件。你还可以设定numpy处理注释行和分隔符的方式,并跳过不需要的行。

第30单元 生成合成正弦波

绘制正弦波:
创建一个连续整数数组,将他们转化为浮点数,调整为正确的周期,取正弦,放大,置换,添加高斯噪声,并模拟仪器测量得到的信号截断效果。

#导入所有优质的模块
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

#定叉了信号、噪声和“仪器”属性的常量
SIG_AMPLITUDE = 10; SIG_OFFSET = 2; SIG_PERIOD = 100
NOISE_AMPLITUDE = 3
N_SAMPLES= 5 * SIG_PERIOD
INSTRUMENT_RANGE = 9

#创建一个正弦波,并加入随机噪声
times = np.arange(N_SAMPLES).astype( float)
signal = SIG_AMPLITUDE*np.sin(2 * np.pi * times / SIG_PERIOD) + SIG_OFFSET
noise = NOISE_AMPLITUDE * np.random.normal(size=N_SAMPLES)
signal += noise

#将仪器测量范用之外的峰佔戒断
signal[signal > INSTRUMENT_RANGE] = INSTRUMENT_RANGE
signal[signal< -INSTRUMENT_RANGE] = -INSTRUMENT_RANGE

#绘制结果
matplotlib.style.use("ggplot")
plt.plot(times, signal)
plt.title("Synthetic sine wave signal")
plt.xlabel("Time")
plt.ylabel("Signal +noise" )
plt.ylim(ymin = -SIG_AMPLITUDE, ymax = SIG_AMPLITUDE)
plt.show()

《Python数据科学入门》之数组变换(第5章)


"Love all, trust a few, do wrong to none. 博爱、寡言、不负人"--梁静茹