一、数组的添加删除与去重
下面是几个常见的数组操作:
- append:将值添加到数组末尾
- insert: 沿指定轴将值插入到指定下标之前
- delete: 返回删掉某个轴的子数组的新数组
- unique: 寻找数组内的唯一元素
>>> a = np.array([[1,2,3],[4,5,6]]) >>> np.append(a, [7,8,9]) # 附加后,变成了一维的 array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> a #原来的数组没有改变 array([[1, 2, 3], [4, 5, 6]]) >>> a.append([10,11,12]) # ndarray没有这个方法 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-165-a36f3ca1308b> in <module>() ----> 1 a.append([10,11,12]) AttributeError: 'numpy.ndarray' object has no attribute 'append' >>> np.append(a, [[7,8,9]],axis = 0) # 注意参数格式 array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> a = np.array([[1,2],[3,4],[5,6]]) >>> np.insert(a,3,[11,12]) # 在3号位置前插入,变成一维了 array([ 1, 2, 3, 11, 12, 4, 5, 6]) >>> a array([[1, 2], [3, 4], [5, 6]]) >>> np.insert(a,1,[11],axis = 0) # 按行插入 array([[ 1, 2], [11, 11], [ 3, 4], [ 5, 6]]) >>> np.insert(a,1,[11],axis = 1) #按列插入 array([[ 1, 11, 2], [ 3, 11, 4], [ 5, 11, 6]]) >>> a = np.arange(12).reshape(3,4) >>> a array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> np.delete(a,5)# 删除指定位置的元素后,变成一维了 array([ 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11]) >>> np.delete(a,1,axis = 0) array([[ 0, 1, 2, 3], [ 8, 9, 10, 11]]) >>> a # 并不会修改原来的数组 array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> np.delete(a,1,axis = 1) array([[ 0, 2, 3], [ 4, 6, 7], [ 8, 10, 11]])
unique是numpy中非常重要的方法:
>>> a = np.array([0,1,4,7,2,1,4,3]) >>> a array([0, 1, 4, 7, 2, 1, 4, 3]) >>> np.unique(a) array([0, 1, 2, 3, 4, 7]) >>> b = np.array([[0,1,4,],[7,2,1],[4,3,0]]) >>> b array([[0, 1, 4], [7, 2, 1], [4, 3, 0]]) >>> np.unique(b) array([0, 1, 2, 3, 4, 7]) >>> np.unique(b,axis=0) array([[0, 1, 4], [4, 3, 0], [7, 2, 1]]) >>> np.unique(b,axis=1) array([[0, 1, 4], [7, 2, 1], [4, 3, 0]]) >>> b = np.array([[0,1,4,],[7,2,1],[4,3,0],[0,1,4,]]) >>> b array([[0, 1, 4], [7, 2, 1], [4, 3, 0], [0, 1, 4]]) np.unique(b,axis=0) array([[0, 1, 4], [4, 3, 0], [7, 2, 1]])
二、数组的形状变换
之前介绍过,可以通过数组的shape属性,查看它的形状:
>>> a = np.floor(10*np.random.random((3,4))) >>> a array([[ 2., 8., 0., 6.], [ 4., 5., 1., 1.], [ 8., 9., 3., 6.]]) >>> a.shape (3, 4)
上面的例子中,先通过numpy的random函数生成一个随机3行4列数组,再对每个元素乘10,最后用floor函数取整。
有很多数组方法可以变换它的形状,并且不修改原始数组本身:
>>> a.ravel() # 平铺数组成为一维数组 array([ 2., 8., 0., 6., 4., 5., 1., 1., 8., 9., 3., 6.]) >>> a.reshape(6,2) # 调整形状 array([[ 2., 8.], [ 0., 6.], [ 4., 5.], [ 1., 1.], [ 8., 9.], [ 3., 6.]]) >>> a.T # 返回转置数组 array([[ 2., 4., 8.], [ 8., 5., 9.], [ 0., 1., 3.], [ 6., 1., 6.]]) >>> a.T.shape (4, 3) >>> a.shape (3, 4)
reshape方法不会修改数组本身,resize则正好相反:
>>> a array([[ 2., 8., 0., 6.], [ 4., 5., 1., 1.], [ 8., 9., 3., 6.]]) >>> a.resize((2,6)) >>> a array([[ 2., 8., 0., 6., 4., 5.], [ 1., 1., 8., 9., 3., 6.]]) >>> a.resize((2,7)) # 突发奇想,作死试试 alueError Traceback (most recent call last) <ipython-input-162-8df1a3f67bca> in <module>() ----> 1 a.resize(2,7) ValueError: cannot resize an array that references or is referenced by another array in this way. Use the resize function >>> np.resize(a, (2,7)) # 但是...居然可以这么干! array([[2., 8., 0., 6., 4., 5., 1.], [1., 8., 9., 3., 6., 2., 8.]]) # 再次提醒,在numpy中有各种类似的坑,你根本踩不过来,所以不要尝试一些自己不确定的东西。
如果reshape方法的一个参数是-1,那么这个参数的实际值会自动计算得出:
>>> a.reshape(3,-1) array([[ 2., 8., 0., 6.], [ 4., 5., 1., 1.], [ 8., 9., 3., 6.]])
来源:https://www.cnblogs.com/lavender1221/p/12630748.html