NumPy常见的数组操作整理
1.修改数组的形状
- reshape :不改变数据
- flat : 数组迭代器
- flatten: 返回一份数据拷贝
- ravel: 返回展开的数组
flat迭代器的使用:
for element in a.flat:
print(element)
flatten:返回一份拷贝的数据:
ndarry.flatten(order='C') #order可选
reval展开数组:
ndarray.reval(order='C‘) #order可选
2.翻转数组
- transpose 对换数组维度
- ndarray.T 与transpose相同
- rollaxis 向后滑动指定的轴
- swapaxes 对换数组的两个轴
import numpy as np a=np.arange(12).reshape(3,4) print('原数组') print(a) print('转置数组') print(a.T)
运算结果:
原数组 [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 转置数组 [[ 0 4 8] [ 1 5 9] [ 2 6 10] [ 3 7 11]] Process finished with exit code 0
* numpy.rollaxis 函数向后滚动特定的轴到一个特定位置,格式如下:
numpy.rollaxis(arr,axis,start)
arr
:数组axis
:要向后滚动的轴,其它轴的相对位置不会改变start
:默认为零,表示完整的滚动。会滚动到特定位置。
numpy.swapaxes
用于转换数组的两个轴,格式如下:
numpy.swapaxes(arr,axis1,axis2)
arr
:输入的数组axis1
:对应第一个轴的整数axis2
:对应第二个轴的整数
numpy.broadcast
numpy.broadcast 用于模仿广播的对象,它返回一个对象,该对象封装了将一个数组广播到另一个数组的结果。
该函数使用两个数组作为输入参数,如下实例:
x=np.array([[1],[2],[3])
y=np.array([4,5,6])
b=np.broadcast(x,y) #对x y 进行广播,并且拥有自身组件的迭代器元组
r,c=b.iters
print(next(r),next(c)) #对x y进行广播
print(shape) #返回广播对象的形状
numpy.expend_dims
该函数通过在指定位置插入新的轴来扩展数组的形状:
numpy.expend_dims(arr,axis)
arr:输入数组
axis:新轴插入的位置
numpy.squeeze 函数从给定数组的形状中删除一维的条目,函数格式如下:
numpy.squeeze(arr, axis)
arr
:输入数组axis
:整数或整数元组,用于选择形状中一维条目的子集
3.连接数组
concatenate : 连接沿着现有轴数组的序列
stack : 沿着新的轴加入一系列数组
hstack: 水平堆叠序列中的数组
vstack: 垂直堆叠序列中的数组
例如对于 a b 两个数组
print (np.concatenate((a,b))) #'沿轴 Y 连接两个数组
print (np.concatenate((a,b),axis = 1))#'沿轴 X 连接两个数组
4.分割数组
split: 将一个数组分割为多个子数组
hsplit: 将一个数组水平分割为多个子数组(按列)
vsplit: 将一个数组垂直分割为多个子数组(按行)
5.数组元素的添加与删除
resize 返回指定形状的新数组
append 将值添加到末尾
insert 沿着指定的轴将值插入到指定下标之下
delete 删除某个轴的子数组,并返回删除后的新数组
unique 查找数组内的唯一元素
resize的应用:
格式:numpy.resize(arr, shape)
b = np.resize(a,(3,3)) print (b)
append的应用:格式:numpy.append(arr, values, axis=None)print
(np.append(a, [7,8,9]))#像数组a添加元素
(np.append(a,[[7,8,9]],axis=0) #沿着Y轴添加元素
insert的应用: 格式:numpy.insert(arr,obj,values,axis)
print (np.insert(a,3,[11,12])) 就是指在数组a的下标3上插入数组[11,12]d
delect的应用:
Numpy.delete(arr, obj, axis)
arr
:输入数组obj
:可以被切片,整数或者整数数组,表明要从输入数组删除的子数组axis
:沿着它删除给定子数组的轴,如果未提供,则输入数组会被展开
如删除数组a的第二列: np.delete(a,1,axis = 1))
a=np.arange(12).reshape(3,4)
print('原数组')
print(a)
print('\n') print(np.delete(a,1,axis = 0))
运行结果:
原数组
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 0 1 2 3] [ 8 9 10 11]] Process finished with exit code 0
np.delete(a,1,axis = 0)中是对第二行进行删除操作
numpy.unique
去除数组中的重复元素
numpy.unique(arr,return_index,return_inverse,return_counts)
arr
:输入数组,如果不是一维数组则会展开return_index
:如果为true
,返回新列表元素在旧列表中的位置(下标),并以列表形式储return_inverse
:如果为true
,返回旧列表元素在新列表中的位置(下标),并以列表形式储return_counts
:如果为true
,返回去重数组中的元素在原数组中的出现次数
# 去除数组中重复的元素 unique
au = np.array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])
u=np.unique(au)
u,indices=np.unique(au,return_inverse=True)
print(u)
print('\n')
print(indices)
运行结果:
[2 5 6 7 8 9] [1 0 2 0 3 1 2 4 0 5] Process finished with exit code 0