1.广播法则(Broadcast Rule)
广播法则能使通用函数有意义地处理不具有相同形状的输入。
- 第一法则:若所有的输入数组维度不都相同,一个“1”将被重复地添加在维度较小的数组上直至所有数据都拥有相同的维度
- 第二法则:确定长度为1的数组沿着特殊方向表现地好像它有沿着那个方向最大形状的大小。对数组来说,沿着那个维度的数组元素的值理应相同。
应用广播法则后,所有数组的大小必须匹配。
2.花哨的索引和索引技巧
numpy比普通的python序列提供更多的索引功能。数组的索引功能:索引整数、切片、被整数数组和布尔数组索引。
2.1 通过数组索引(Indexed by Array)
1 | # indexed via array |
2.2 通过布尔数组索引(Indexed by Boolean Function)
当我们使用整数数组索引数组时,我们提供一个索引列表去选择。通过布尔数组索引法使我们可以显式地选择数组中我们想要和不想要的元素。
我们能想到的使用布尔数组的索引最自然方式是使用和源数组一样形状的布尔数组。
1 | # indexed via boolean array |
2.3 ix()函数
ix()函数可为了获得多元组的结果而用来结合不同向量。如,若你想要用所有向量a、b和c元素组成的 三元组来计算a+b*c:
1 | # ix_() function |
2.4 字符串索引(Indexed by String)
3.线性代数(Linear Algebra)
3.1 简单数组运算
1 | # coding:utf-8 |
3.2 矩阵类
1 | # coding:utf-8 |
3.3 索引:比较矩阵和二维数组
注意numpy中数组和矩阵有重要区别。numpy提供了2个基本对象:(其他对象都是建构在它们之上的)
一个N维数组对象
一个通用函数对象
矩阵:继承自numpy数组对象的二维数组对象。对数组和矩阵,索引都必须包含合适的一个或多个这些组合:整数标量、省略号、整数列表;布尔值,整数,布尔值构成的元组,和一个一维整数或布尔值数组。矩阵可被用作矩阵的索引,但通常需要数组、列表或其他形式来完成这个任务。
索引从0开始
使用矩阵的行和列表示一个二维数组或矩阵。沿0轴的方向被穿过的称作行,沿1轴的方向被穿过的是列。
1 | # coding:utf-8 |
4.技巧和Tipps
4.1 “自动”改变形状
更改数组的维度,你可以省略一个尺寸,它将被自动推导出来。
1 | # change the shape automatically |
4.2 向量组合(Vector Stacking)
我们如何用两个相同尺寸的行向量列表构建一个二维数组?在 MATLAB
中这非常简单:如果 x
和 y
是两个相同长度的向量,你仅仅需要做 m=[x;y]
。在 Numpy
中这个过程通过函数 column_stack
、dstack
、hstack
和 vstack
来完成,取决于你想要在那个维度上组合。例如:
1 | # vector stacking |
4.3 直方图(histogram)
Numpy
中histogram
函数应用到一个数组返回一对变量:直方图数组和箱式向量。注意:matplotlib
也有一个用来建立直方图的函数(叫作hist
,正如matlab
中一样)与Numpy
中的不同。
主要的差别是pylab.hist自动绘制直方图,而numpy.histogram仅仅产生数据。
1 | # histogram |