机器学习之Numpy基本用法(二)
微信公众号:数据挖掘与分析学习
1.复制和视图
在操作数组时,有时会将数据复制到新数组中,有时则不会。 这通常是初学者混淆的根源。 有三种情况:
1.1 不复制
简单的赋值不会复制数组对象或其数据。
Python将可变对象作为引用传递,因此函数调用不会复制。
1.2 视图或浅拷贝
不同的数组对象可以共享相同的数据。 view方法创建一个查看相同数据的新数组对象。
对数组切片会返回一个视图:
1.3 深拷贝
copy方法生成数组及其数据的完整副本。
1.4 函数和方法概述
以下是按类别排序的一些有用的NumPy函数和方法名称的列表。
2.数组广播
广播允许通用函数以有意义的方式处理不具有完全相同形状的输入。
广播的第一个规则是,如果所有输入数组不具有相同数量的维度,则将“1”重复地预先添加到较小阵列的形状,直到所有阵列具有相同数量的维度。
广播的第二个规则确保沿着特定维度的大小为1的数组就好像它们具有沿着该维度具有最大形状的阵列的大小。假定数组元素的值沿着“广播”数组的那个维度是相同的。
应用广播规则后,所有阵列的大小必须匹配。
3.索引和相关技巧
NumPy提供比常规Python序列更多的索引功能。 除了通过整数和切片进行索引之外,正如我们之前看到的,数组可以由整数数组和布尔数组索引。
3.1 使用索引数组进行索引
当索引数组a是多维的时,单个索引数组指的是a的第一个维度。以下示例通过使用调色板将标签图像转换为彩色图像来显示此行为。
我们还可以为多个维度提供索引。 每个维度的索引数组必须具有相同的形状。
3.2 使用bool数组进行索引
当我们使用(整数)索引数组索引数组时,我们提供了要选择的索引列表。使用布尔索引,方法是不同的; 我们明确地选择了我们想要的数组中的哪些项目以及我们不想要的项目。人们可以想到的最自然的布尔索引方法是使用与原始数组具有相同形状的布尔数组:
此属性在赋值中非常有用:
使用布尔值进行索引的第二种方法更类似于整数索引; 对于数组的每个维度,我们给出一个1D布尔数组,选择我们想要的切片:
请注意,1D布尔数组的长度必须与要切片的维度(或轴)的长度一致。
3.3 ix_()函数
ix_函数可用于组合不同的向量,以便获得每个n-uplet的结果。 例如,如果要计算从每个向量a,b和c中取得的所有三元组的所有a + b * c:
4.线性代数
4.1 简单的数组操作