print( "Hello,NumPy!" ) (3)

另外,还有一点需要说明的是,加入我的数据的维度相当高,为了方便我们对数据进行索引,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的结果,而并非产生一个新的结果:

print(

还有一个小技巧需要掌握的是,在进行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   从数组的形状中删除一维条目  

具体操作如下:

print(

数组的连接:

函数 描述
concatenate   连接沿现有轴的数组序列  
hstack   水平堆叠序列中的数组(列方向)  
vstack   竖直堆叠序列中的数组(行方向)  

下面代码显示了数组连接的操作,其中concatenate可以通过控制axis的值来确定连接的方向,作用等同于hstack和vstack。还有一点需要注意的是:以下示例仅仅是连接两个数组,其实可以同时连接多个的,比如np.concatenate((x, y, z), axis=1)

print(

数组的切分:

函数 描述
split   将一个数组分割为多个子数组  
hsplit   将一个数组水平分割为多个子数组(按列)  
vsplit   将一个数组垂直分割为多个子数组(按行)  

同数组的连接一样,split可以通过控制axis属性来得到与hsplit、vsplit相同的作用,下面只给出split的示例,关于hsplit和vsplit可参考官方文档:

print(

数组元素的添加和删除:

函数 描述
append   将值添加到数组末尾  
insert   沿指定轴将值插入到指定下标之前  
delete   删掉某个轴的子数组,并返回删除后的新数组  

print(

广播(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 兼容。

来源:菜鸟教程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjxzg.html