numpy数组操作

numpy数组操作包括以下几类:

修改数组形状

反转数组

修改数组维度

连接数组

分割数组

数组元素的添加与删除

修改数组形状

函数                   描述

reshape              不改变数据的条件下修改形状

flat                       数组元素迭代器

flatten                  返回一份数组拷贝,对拷贝所做的修改不会影响原始数组

ravel                     返回展开数组

numpy.reshape

numpy.reshape函数可以在不改变数据的条件下改变形状,格式如下:

numpy.reshape(arr,newshape,order='C)

arr:要修改形状的数组

newshape:整数或者整数数组,新的形状应当兼容原有形状

order:‘C’按行,‘A’原顺序,‘k’元素在内存中的出现顺序。

实例:

import numpyas np

a=np.arange(8)

print(a)

b=a.reshape(4,2)

print(b)


numpy.ndarray.flat是一个数组元素迭代器

实例:使用flat属性迭代元素

import numpyas np

a=np.arange(9).reshape(3,3)

for rowin a:

print(row)

#使用flat属性,该属性是一个数组元素迭代器:

for elementin a.flat:

print(element)


numpy.ndarray.flatten

numpy.ndarray.flatten返回一份数组拷贝,对拷贝所做的修改不会影响原始数组,格式如下:

ndarray.flatten(order='C')

参数说明:

order:'C'按行,‘F’按列,‘A’原顺序,‘K’元素在内存中的出现顺序

实例:

import numpyas np

a=np.arange(8).reshape(2,4)

print(a)

print(a.flatten())

print(a.flatten(order='F'))


numpy.ravel

numpy.ravel()展平的数组元素,顺序通常是“C风格”,返回的是数组视图(view,有点类似C/C++引用reference的意味),修改会影响原始数组。

该函数接收两个参数:

numpy.ravel(a,order='C')

参数说明:

order:‘C’按行,‘F’:按列,‘A’原顺序,‘K’:元素在内存中的出现顺序。

实例:ravel应用

import numpyas np

a=np.arange(8).reshape(2,4)

print(a)

b=a.ravel()

print(b)

c=a.ravel(order='F')

print(c)


翻转数组

函数                          描述

transpose                  兑换数组的维度

ndarray.T                   和self.transpose()相同

rollaxis                       向后滚动指定的轴

swapaxes                  兑换数组的两个轴

numpy.transpose

numpy.transpose函数用于兑换数组的维度,格式如下:

numpy.transpose(arr,axes)

参数说明

arr:要操作的数组

axes:整数列表,对应维度,通常所有维度都会对换。

实例:respose应用

import numpyas np

a=np.arange(8).reshape(2,4)

print(a)

print(np.transpose(a))


numpy.ndarray.T和numpy.transpose类似:

实例:numpy.ndarray.T的应用

import numpyas np

a=np.arange(12).reshape(3,4)

print('原始数组:')

print(a)

print('转置数组:')

print(a.T)


numpy.rollaxis

numpy.rollaxis函数向后滚动特定的轴到一个特定位置,格式如下:

numpy.rollaxis(arr,axis,start)

参数说明:

arr:数组

axis:要向后滚动的轴,其它轴的相对位置不会改变

start:默认为0,表示完整的滚动。会滚动到特定位置。

实例:rollaxis的应用

import numpyas np

a=np.arange(8).reshape(2,2,2)

print("原始数组是:")

print(a)

print('调用rollaxis函数:')

print(np.rollaxis(a,2))

print('调用rollaxis函数:')

print(np.rollaxis(a,2,1))


numpy.swapaxes

numpy.swapaxes函数用于交换数组的两个轴,格式如下:

numpy.swapaxes(arr,axs1,axis2)

arr:输入的数组

axis1:对应第一个轴的整数

axis2:对应第二轴的整数

实例:swapaxes的应用

import numpyas np

a=np.arange(8).reshape(2,2,2)

print('原始数组是:')

print(a)

print('调用swapaxes函数后的数组:')

print(np.swapaxes(a,2,0))


修改数组维度

维度                                   描述

broadcast                           产生模仿广播的对象

broadcast_to                      将数组广播到心形状

expand_dims                      扩展数组的形状

squeeze                              从数组的形状中删除一维条目

实例:使用broadcast广播

import numpyas np

x=np.array([[1],[2],[3]])

y=np.array([4,5,6])

b=np.broadcast(x,y)

print('对y广播x:')

r,c=b.iters

print(next(r),next(c))

print(next(r),next(c))

print('广播对象的形状:')

print(b.shape)

#手动使用broadcast将x和y相加

c=np.empty(b.shape)

print('手动使用broadcast将x和y相加:')

print(c.shape)

c.flat=[u+vfor (u,v)in b]

print('调用flat函数:')

print(c)

print('\n')

print('x与y的和:')

print(x+y)



numpy.broadcast_to

numpy.broadcast_to函数将数组广播到新形状。它在原始数组上返回只读视图。它通常不连续。如果新形状不符合numpy的广播规则,该函数可能会抛出valueError。

numpy.broadcast_to(array,shape,subok)

实例:broadcast_to应用

import numpyas np

a=np.arange(4).reshape(1,4)

print('原始数组:')

print(a)

print('调用broadcast_to函数后:')

print(np.broadcast_to(a,(4,4)))


numpy.expand_dims

numpy.expand_dims函数通过在指定位置插入新的轴来扩展数组形状,函数格式如下:

numpy.expand_dims(arr,axis)

参数说明:

arr:输入数组

axis:新轴插入的位置

实例:维度不一插入

import numpyas np

x=np.array(([1,2],[3,4]))

print('数组x:')

print(x)

y=np.expand_dims(x,axis=0)

print('数组y:')

print(y)

print('数组x和数组y的维度:')

print(x.ndim,y.ndim)

print('数组x和数组y的形状:')

print(x.shape,y.shape)

print('在位置1插入轴后的数组y:')

y=np.expand_dims(y,axis=1)

print(y)

print('x的形状和y的形状:')

print(x.shape,y.shape)


numpy.squeeze

numpy.squeeze函数从给定数组的形状中删除一维的条目,函数格式如下:

numpy.squeeze(arr,axis)

参数说明:

arr:输入数组

axis:整数或者整数元组,用于选择形状中一维条目的子集

实例:

import numpyas np

x=np.arange(9).reshape(1,3,3)

print('数组X:')

print(x)

y=np.squeeze(x)

print('数组y:')

print(y)

print('数组x和y的形状:')

print(x.shape,y.shape)

连接数组

函数                             描述

concatenate                 连接沿现有轴的数组序列

stack                             沿着新的轴加入一系列数组

hstack                            水平堆叠序列中的数组(列方向)

vstack                             竖直堆叠序列中的数组(行方向)

numpy.concatenate

numpy.concatenate函数用于沿指定轴连接相同形状的两个或多个数组,格式如下:

numpy.concatenate((a1,a2,...),axis)

参数说明:

a1,a2,...相同类型的数组

axis:沿着它连接数组的轴,默认为0

实例:

import numpyas np

a=np.array([[1,2],[3,4]])

print('数组a:')

print(a)

b=np.array([[5,6],[7,8]])

print('数组b:')

print(b)

print('沿轴0连接两个数组:')

print(np.concatenate((a,b)))

print('沿轴1连接两个数组:')

print(np.concatenate((a,b),axis=1))


numpy.stack

numpy.stack函数用于沿新轴链接数组序列,格式如下:

numpy.stack(arrays,axis)

参数说明:

arrays相同形状的数组序列

axis:返回数组中的轴,输入数组沿着它来堆叠

实例:

import numpyas np

a=np.array([[1,2],[3,4]])

print('数组a:')

print(a)

b=np.array([[5,6],[7,8]])

print('数组b:')

print(b)

print('沿轴0堆叠两个数组:')

print(np.stack((a,b),0))

print('沿轴1堆叠两个数组:')

print(np.stack((a,b),1))


numpy.hstack

numpy.hstack是numpy.stack函数的变体,它通过水平堆叠生成数组。

实例:

import numpyas np

a=np.array([[1,2],[3,4]])

print('第一个数组:')

print(a)

b=np.array([[5,6],[7,8]])

print('第二个数组:')

print(b)

print('水平堆叠:')

c=np.hstack((a,b))

print(c)


numpy.vstack

numpy.vstack是numpy.stack函数的变体,它通过垂直堆叠来生成数组

实例:

import numpyas np

a=np.array([[1,2],[3,4]])

print('数组a:')

print(a)

b=np.array([[5,6],[7,8]])

print('数组b:')

print(b)

print('垂直连接:')

c=np.vstack((a,b))

print(c)


分割数组

函数                        数组及操作

split                         将一个数组分割为多个子数组

hsplit                         将一个数组水平分割为多个子数组(按列)

vsplit                        讲一个数组垂直分割为多个子数组(按行)

numpy.split

numpy.split函数沿特定的轴将数组分割为子数组,格式如下:

numpy.split(ary,indices_or_sections,axis)

参数说明:

ary:被分割的数组

indices_or_sections:果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)

axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分。

实例:

import numpyas np

a=np.arange(9)

print('数组a:')

print(a)

print('将数组分为三个大小相等的子数组:')

b=np.split(a,3)

print(b)

print('将数组在一维数组中标明的位置分割:')

b=np.split(a,[4,7])

print(b)


numpy.hsplit

numpy.hsplit函数用于水平分割数组,通过制定要返回的相同形状的数组数量来拆分原数组。

实例:

import numpyas np

a=np.floor(10*np.random.random((2,6)))

print('数组a:')

print(a)

print('拆分后:')

print(np.hsplit(a,3))


numpy.vsplit

numpy.vsplit沿着垂直轴分割,其分割方式与hsplit用法相同

实例:

import numpyas np

a=np.arange(16).reshape(4,4)

print('数组a:')

print(a)

print('垂直分割:')

b=np.vsplit(a,2)

print(b)


数组元素的添加与删除

函数                  元素及描述

resize                  返回指定形状的新数组

numpy.resize(arr,shape)

参数说明:

arr:要修改大小的数组

shape:返回数组的新形状

实例:

import numpyas np

a=np.array([[1,2,3],[4,5,6]])

print('数组a:')

print(a)

print(a.shape)

b=np.resize(a,(3,2))

print('数组b:')

print(b)

print(b.shape)

b=np.resize(a,(3,3))

print(b)


numpy.append

numpy.append函数在数组的末尾添加值。追加操作会分配整个数组,并把原来的数组赋值到新数组中。此外,输入数组的维度必须匹配否则将生成valueerror。

append函数返回的始终是一个一维数组

numpy.append(arr,values,axis=None)

参数说明:

arr:输入数组

values:要向arr添加的值,需要和arr形状相同(除了要添加的轴)

axis:默认为None。当axis无定义时,是横向加成,返回总是为一维数组,当axis有定义的时候,分别为0和1的时候。当axis有定义的时候,分别为0和1的时候(列数要相同)。当axis为1时,数组是加在右边(行数要相同)

实例:

import numpyas np

a=np.array([[1,2,3],[4,5,6]])

print('第一个数组:')

print(a)

print('向数组添加元素:')

print(np.append(a,[7,8,9]))

print('沿轴0添加元素:')

print(np.append(a,[[7,8,9]],axis=0))

print('沿轴1添加元素:')

print(np.append(a,[[5,5,5],[7,8,9]],axis=1))


numpy.insert

numpy.insert函数在给定索引之前,沿给定轴在输入数组中插入值。

如果值的类型转换为要插入,则它与输入数组不同。插入没有原地,函数会返回一个新数组。此外,如果未提供轴,则输入数组会被展开。

numpy.insert(arr,obj,values,axis)

参数说明:

arr:输入数组

obj:在其之前插入值的索引

values:要插入的值

axis:沿着它插入的轴,如果未提供,则输入数组会被展开

实例:

import numpyas np

a=np.array([[1,2],[3,4],[5,6]])

print('数组a:')

print(a)

print('未传递axis参数。在插入之前输入数组会被展开。')

print(np.insert(a,3,[11,12]))

print('传递了axis参数。会广播数组来配输入数组。')

print('沿轴0广播:')

print(np.insert(a,1,[11],axis=0))

print('沿轴1广播:')

print(np.insert(a,1,11,axis=1))

numpy.delete

numpy.delete函数返回从输入数组中删除指定子数组的新数组。与insert(函数的情况一样,如果未提供轴参数,则输入数组将展开。)

numpy.delete(arr,obj,axis)

arr:输入数组

obj:可以切片,整数或者整数数组,表明要从输入数组删除的子数组

axis:沿着它删除给定子数组的轴,如果未提供,则输入数组会被展开

实例:

import numpyas np

a=np.arange(12).reshape(3,4)

print('数组a:')

print(a)

print('未传递axis参数,在插入之前输入数组会被展开:')

print(np.delete(a,5))

print('删除第二列:')

print(np.delete(a,1,axis=1))

print('包含从数组中删除的替代值的切片:')

a=np.array([1,2,3,4,5,6,7,8,9,10])

print(np.delete(a,np.s_[::2]))


numpy.unique

numpy.unique函数用于去除数组中的重要元素

numpy.unique(arr,return_index,return_inverse,return_counts)

arr:输入数组,如果不是一维数组则会展开

return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式存储

return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式存储

return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数

实例:

import numpyas np

a=np.array([5,2,6,2,7,5,6,8,2,9])

print('数组a:')

print(a)

print('第一次去重:')

u=np.unique(a)

print(u)

print('去重数组的索引数组:')

u,indices=np.unique(a,return_index=True)

print(indices)

print('可以看到每个和原数组下标对应的数值:')

print(a)

print('去重数组的下标:')

u,indices=np.unique(a,return_inverse=True)

print(u)

print('下标为:')

print(indices)

print('使用下标重构原数组:')

print(u[indices])

print('返回去重元素的重复数量:')

u,indices=np.unique(a,return_counts=True)

print(u)

print(indices)


你可能感兴趣的:(numpy数组操作)