1. 前言
NumPy 中包含了一些处理数组的常用方法,大致可分为以下几类:
- 数组变维操作
- 数组转置操作
- 修改数组维度操作
- 连接与分割数组操作
下面分别对它们进行介绍。
2. 数组变维操作
函数名称 | 函数介绍 |
---|---|
reshape | 在不改变数组元素的条件下,修改数组的形状。 |
flat | 返回是一个迭代器,可以用 for 循环遍历其中的每一个元素。 |
flatten | 以一维数组的形式返回一份数组的副本,对副本的操作不会影响到原数组。 |
ravel | 返回一个连续的扁平数组(即展开的一维数组),与 flatten不同,它返回的是数组视图(修改视图会影响原数组)。 |
reshape 在《NumPy ndarray对象》一节已经做了讲解,本节不再介绍。
1) numpy.ndarray.flat
numpy.ndarray.flat 返回一个数组迭代器,实例如下:
import numpy as np a = np.arange(9).reshape(3,3) for row in a: print (row) #使用flat属性: for ele in a.flat: print (ele,end=",")
输出结果如下:
#原数组 [0 1 2] [3 4 5] [6 7 8] #输出元素 0,1,2,3,4,5,6,7,8,
2) numpy.ndarray.flatten()
numpy.ndarray.flatten 返回一份数组副本,对副本修改不会影响原始数组,其语法格式如下:
ndarray.flatten(order='C')
实例如下:
import numpy as np a = np.arange(8).reshape(2,4) print (a) #默认按行C风格展开的数组 print (a.flatten()) #以F风格顺序展开的数组 print (a.flatten(order = 'F'))
输出结果:
#数组a [[0 1 2 3] [4 5 6 7]] #默认c顺序站看数组 [0 1 2 3 4 5 6 7] # F顺序站看数组 [0 4 1 5 2 6 3 7]
3) numpy.ravel()
numpy.ravel() 将多维数组中的元素以一维数组的形式展开,该方法返回数组的视图(view),如果修改,则会影响原始数组。
numpy.ravel(a, order='C')
实例结果如下:
import numpy as np a = np.arange(8).reshape(2,4) print ('原数组:') print (a) print ('调用 ravel 函数后:') print (a.ravel()) print ('F 风格顺序调用 ravel 函数之后:') print (a.ravel(order = 'F'))
输出结果如下:
原数组: [[0 1 2 3] [4 5 6 7]] 调用 ravel 函数后: [0 1 2 3 4 5 6 7] F 风格顺序调用 ravel 函数之后: [0 4 1 5 2 6 3 7]
3. 数组转置操作
函数名称 | 说明 |
---|---|
transpose | 将数组的维度值进行对换,比如二维数组维度(2,4)使用该方法后为(4,2)。 |
ndarray.T | 与 transpose 方法相同。 |
rollaxis | 沿着指定的轴向后滚动至规定的位置。 |
swapaxes | 对数组的轴进行对换。 |
1) numpy.transpose()
numpy.transpose() 用于对换多维数组的维度,比如二维数组使用此方法可以实现矩阵转置,语法格式如下:
numpy.transpose(arr, axes)
参数说明如下:
- arr:要操作的数组
- axes:可选参数,元组或者整数列表,将会按照该参数进行转置。
示例如下:
import numpy as np a = np.arange(12).reshape(3,4) print (a) print (np.transpose(a))
输出结果:
原数组: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 对换数组: [[ 0 4 8] [ 1 5 9] [ 2 6 10] [ 3 7 11]]
ndarray.T 的使用方法与其类似,这里就在赘述。
2) numpy.rollaxis()
该方法表示沿着指定的轴,向后滚动至一个特定位置,格式如下:
numpy.rollaxis(arr, axis, start)
参数说明:
- arr:要传入的数组;
- axis:沿着哪条轴向后滚动,其它轴的相对位置不会改变;
- start:默认以 0 轴开始,可以根据数组维度调整它的值。
3) numpy.swapaxes()
该方法用于交换数组的两个轴,其语法格式如下:
numpy.swapaxes(arr, axis1, axis2)
示例如:
import numpy as np # 创建了三维的 ndarray a = np.arange(27).reshape(3,3,3) print (a) #对换0轴与2轴 print(np.swapaxes(a,2,0))
输出结果:
#原a数组 [[[ 0 1 2] [ 3 4 5] [ 6 7 8]] [[ 9 10 11] [12 13 14] [15 16 17]] [[18 19 20] [21 22 23] [24 25 26]]] #对换轴后的数组 [[[ 0 9 18] [ 3 12 21] [ 6 15 24]] [[ 1 10 19] [ 4 13 22] [ 7 16 25]] [[ 2 11 20] [ 5 14 23] [ 8 17 26]]]
4. 修改数组维度操作
修改数组维度的操作,主要有以下方法:
函数名称 | 描述说明 |
---|---|
broadcast | 生成一个模拟广播的对象。 |
broadcast_to | 将数组广播为新的形状。 |
expand_dims | 扩展数组的形状。 |
squeeze | 从数组的形状中删除一维项。 |
1) numpy.broadcast()
返回值是数组被广播后的对象,该函数以两个数组作为输入参数,实例如下:
import numpy as np a = np.array([[1], [2], [3]]) b = np.array([4, 5, 6]) # 对b广播a d = np.broadcast(a,b) #d它拥有 iterator 属性 r,c = d.iters print (next(r), next(c)) print (next(r), next(c)) # 使用broadcast将a与b相加 e = np.broadcast(a,b) f=np.empty(e.shape) f.flat=[x+y for (x,y) in e] print(f) print(a+b)
输出结果:
#对b广播a 1 6 2 4 #f数组 [[5. 6. 7.] [6. 7. 8.] [7. 8. 9.]] #a+b [[5 6 7] [6 7 8] [7 8 9]]
2) numpy.broadcast_to()
该函数将数组广播到新形状中,它在原始数组的基础上返回一个只读视图。 如果新形状不符合 NumPy 的广播规则,则会抛出 ValueError 异常。函数的语法格式如下:
numpy.broadcast_to(array, shape, subok)
使用实例如下所示:
import numpy as np a = np.arange(4).reshape(1,4) print("原数组",a) print ('调用 broadcast_to 函数之后:') print (np.broadcast_to(a,(4,4)))
最后的输出结果如下:
#原数组 [[0 1 2 3]] #调用 broadcast_to 函数之后: [[0 1 2 3] [0 1 2 3] [0 1 2 3] [0 1 2 3]]
3) numpy.expand_dims()
在指定位置插入新的轴,从而扩展数组的维度,语法格式如下:
numpy.expand_dims(arr, axis)
参数说明:
- arr:输入数组
- axis:新轴插入的位置
实例如下:
标签:12,NumPy,broadcast,np,数组,print,numpy,ravel From: https://www.cnblogs.com/jiajunling/p/16730389.html