另外,还有一点需要说明的是,加入我的数据的维度相当高,为了方便我们对数据进行索引,NumPy为我们提供了...的方式来进行切分,具体例子如下:
In [14]: a = np.random.randint(0, 2, 6).reshape(2, 3) In [15]: a Out[15]: array([[1, 1, 1], [1, 0, 1]]) In [16]: a[:, :2] Out[16]: array([[1, 1], [1, 0]]) In [17]: for i in a: # 对矩阵进行遍历,则输出的是行向量,单个输出的维度比原维度少1 ...: print(i, end=", ") [1 1 1], [1 0 1], In [19]: data = np.random.randint(0, 2, [2, 2, 3]) In [20]: data Out[20]: array([[[0, 0, 1], [0, 1, 1]], [[1, 0, 0], [0, 1, 0]]]) In [21]: data[..., :2] # ...则表示前两个维度全要,相当于 data[:, :, :2] Out[21]: array([[[0, 0], [0, 1]], [[1, 0], [0, 1]]])shape操作:
a.ravel()、ndarray.flatten(),将ndarray进行拉伸操作(拉直成向量形式)
a.reshape(),重新改变a的shape外形
a.T、a.transpose(),返回a的倒置矩阵
以上几个操作返回的都是新的结果,而不改变原来的ndarray(a)。且上述操作默认的都是横向操作,如果需要纵向,则需要控制order参数,具体操作可参考菜鸟教程。除了reshape之外,还有resize,只不过resize会改变a的结果,而并非产生一个新的结果:
还有一个小技巧需要掌握的是,在进行reshape的时候,假如传入-1,则会自动计算出对应的结果。比如一个 2x3的矩阵a,我们进行a.reshape(3, -1),则这里的-1代表的就是2,当我们数据量大的时候,这个用起来还是挺方便的:
In [44]: a Out[44]: array([[1, 1, 1], [1, 0, 1]]) In [45]: a.reshape([3, -1]) Out[45]: array([[1, 1], [1, 1], [0, 1]])数组维度的修改:
维度 描述broadcast_to 将数组广播到新形状
expand_dims 扩展数组的形状
squeeze 从数组的形状中删除一维条目
具体操作如下:
数组的连接:
函数 描述concatenate 连接沿现有轴的数组序列
hstack 水平堆叠序列中的数组(列方向)
vstack 竖直堆叠序列中的数组(行方向)
下面代码显示了数组连接的操作,其中concatenate可以通过控制axis的值来确定连接的方向,作用等同于hstack和vstack。还有一点需要注意的是:以下示例仅仅是连接两个数组,其实可以同时连接多个的,比如np.concatenate((x, y, z), axis=1)
数组的切分:
函数 描述split 将一个数组分割为多个子数组
hsplit 将一个数组水平分割为多个子数组(按列)
vsplit 将一个数组垂直分割为多个子数组(按行)
同数组的连接一样,split可以通过控制axis属性来得到与hsplit、vsplit相同的作用,下面只给出split的示例,关于hsplit和vsplit可参考官方文档:
数组元素的添加和删除:
函数 描述append 将值添加到数组末尾
insert 沿指定轴将值插入到指定下标之前
delete 删掉某个轴的子数组,并返回删除后的新数组
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。
如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。
In [8]: import numpy as np In [9]: a = np.array([1,2,3,4]) ...: b = np.array([10,20,30,40]) In [10]: a * b Out[10]: array([ 10, 40, 90, 160])当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。如:
In [11]: a = np.array([[ 0, 0, 0], ...: [10,10,10], ...: [20,20,20], ...: [30,30,30]]) ...: b = np.array([1,2,3]) In [12]: a + b Out[12]: array([[ 1, 2, 3], [11, 12, 13], [21, 22, 23], [31, 32, 33]])下面的图片展示了数组 b 如何通过广播来与数组 a 兼容。