numpy模块

关注公众号“轻松学编程”了解更多。

以下命令都是在浏览器中输入。
cmd命令窗口输入:jupyter notebook
后打开浏览器输入网址http://localhost:8888/

一、导入模块

  1. import numpy as np

查看numpy版本

  1. np.__version__

Numpy可以提供数组支持以及相应的高效处理函数,是Python数据分析的基础,也是SciPy、Pandas等数据处理和科学计算库最基本的函数功能库,且其数据类型对Python数据分析十分有用。

二、创建数组(ndarray)

1. 使用np.array()

参数为列表: 如[1, 4, 2, 5, 3]

  1. arr1=np.array([1,2,3,4])
  2. arr1 #点击shift + Enter后可直接查看数组
1.1 查看变量的数据类型
  1. type(arr1)
  2. 输出:numpy.ndarray
1.2 创建二维数组
  1. arr2= np.array([[1,2,3],[4,5,6],[7,8,9]])
  2. arr2
1.3 创建多维数组

如创建三维数组:

  1. arry3=np.array([[[1,2,3],[4,5,6],[7,8,9]]])
  2. arry3
1.4 注意
  • numpy默认ndarray的所有元素的类型是相同的
  • 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int

如:

  1. np.array([1,2,'a'])
  2. 输出:array(['1', '2', 'a'],
  3. dtype='<U11')
  • shape的使用:shape返回的是ndarray的数组形状(返回类型是元组)。返回值的数据个数表示的就是数组的维度
  1. arr2.shape
  2. 输出:(3, 3) #意思是arr2是一个3行3列的数组
2、使用matplotlib.pyplot获取一个numpy数组,数据来源于一张图片
2.1、导入模块
  1. import matplotlib.pyplot as plt
2.2 读取图片
  1. img=plt.imread(r'./虎.jpg') #img此时就是numpy.ndarray
  2. img.shape
  3. 输出:(369, 389, 3) #img形状为三维数组,369*389像素,3代表颜色维度
  1. type(img)
  2. 输出:numpy.ndarray
2.3显示图片
  1. plt.imshow(img)
  2. plt.show()

######2.4修改图片

  1. img_ecg=img-50 #img-50意思是每个元素减去50,数组值改变,图片自然会改变
  2. plt.imshow(img_ecg)
  3. plt.show()
3、使用numpy的常见函数创建

包含以下常见创建方法:

3.1 np.ones(shape, dtype=None, order=‘C’)
  1. #创建2行2列的全部数值都为1的二维数组
  2. arr= np.ones(shape=(2,2),dtype=int)
  3. arr
  4. 输出:array([[1, 1],
  5. [1, 1]])
3.2 np.zeros(shape, dtype=None, order=‘C’)
  1. #创建2行3列的全部数值都为0的二维数组
  2. arr=np.zeros([2,3])
  3. arr
  4. 输出:array([[ 0., 0., 0.],
  5. [ 0., 0., 0.]])
3.3 np.full(shape, fill_value, dtype=None, order=‘C’)
  1. #创建2行3列的全部数值都为10的二维数组
  2. #fill_value参数为数组填充的值
  3. arr=np.full(shape=(2,4),fill_value=10,dtype=int)
  4. arr
  5. 输出:array([[10, 10, 10, 10],
  6. [10, 10, 10, 10]])
3.4 np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差数列
  1. #数组初值为0,有10个值,终值为9
  2. arr_linspace=np.linspace(start=0,stop=10,num=10,endpoint=False)
  3. arr_linspace
  4. 输出:array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
3.5 np.arange([start, ]stop, [step, ]dtype=None)
  1. ##数组初值为0,有5(10除以2)个值,终值为8,只能创建一维数组
  2. arr_arange=np.arange(0,10,2)
  3. arr_arange
  4. 输出:array([0, 2, 4, 6, 8])
3.6 np.random.randint(low, high=None, size=None, dtype=‘l’)
  1. #创建一个随机数在[10,90)的3行4列二维数组
  2. #size=[3]则是一个一维数组,size=[3,4,5]则是三维数组
  3. #随机原理:根据当前系统的时间产生随机数
  4. #可以固定种子,使用seed(种子)函数
  5. #np.random.seed(1)
  6. np.random.randint(10,90,size=[3,4])
3.7 np.random.randn(d0, d1, …, dn) 标准正太分布
  1. #创建一个10个元素的一维数组
  2. np.random.randn(10)
  1. #创建一个多维数组
  2. #如创建10行,10列的数组
  3. np.random.randn((10,10))
3.8 np.random.random(size=None)

生成[0,1)的随机数

  1. #创建一个2行2列的数值在[0,1)的二维数组
  2. np.random.random(size=[2,2])
3.9 np.random.rand(d0,d1,…dn )

以给定的形状创建一个数组,并在数组中加入在[0,1)之间均匀分布的随机样本。

  1. np.random.rand(10)

  1. np.random.rand(2,2)

3.10 np.eye(N, M=None, k=0, dtype=float)

  1. #创建一个对角线为1的矩阵(二维数组)
  2. arr_eys=np.eye(4)
  3. arr_eys
  4. 输出:
  5. array([[ 1., 0., 0., 0.],
  6. [ 0., 1., 0., 0.],
  7. [ 0., 0., 1., 0.],
  8. [ 0., 0., 0., 1.]])

三、ndarray的属性

4个必记参数:

ndim:维度

shape:形状(各维度的长度)

size:总长度

dtype:元素类型

  1. arr_eys.ndim
  2. 输出:2
  1. arr_eys.shape
  2. 输出:(4, 4) #4行4列的二维数组
  1. arr_eys.size
  2. 输出:16
  1. arr_eys.dtype
  2. 输出:dtype('float64')
  1. type(arr_eys)
  2. 输出:numpy.ndarray

四、ndarray的基本操作

1、 索引

通过下标来获取元素。一维与列表完全一致 多维时同理 。

  1. np.random.seed(10)
  2. arr=np.random.randint(10,50,size=(3,4))
  3. arr
  4. 输出:
  5. array([[19, 46, 25, 10],
  6. [38, 35, 39, 39],
  7. [18, 19, 10, 46]])
  1. #索引
  2. arr[1][2]
  3. 输出:39

也根据索引修改数据 。

2 、切片
2.1 一个冒号:进行切片

通过冒号来切片,通过逗号来区分维度。一维与列表完全一致 多维时同理 。

  1. #获取前两行数据
  2. arr[0:2]
  3. 输出:
  4. array([[19, 46, 25, 10],
  5. [38, 35, 39, 39]])
  1. #获取前两行的前两列数据
  2. arr[0:2,0:2]
  3. 输出:
  4. array([[19, 46],
  5. [38, 35]])

逗号左边切的是第一个维度(行),逗号右边切的是第二个维度(列)

  1. #获取二维数组前两列数据
  2. arr[:,0:2]
  3. 输出:
  4. array([[19, 46],
  5. [38, 35],
  6. [18, 19]])
2.2 两个冒号::进行切片

一维

将数据反转,例如[1,2,3]---->[3,2,1

  1. #创建一维数组
  2. arr=np.arange(0,10)
  3. arr
  4. 输出:
  5. array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  1. #反转
  2. arr[::-1]
  3. 输出:
  4. array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

二维

  1. #创建一个3行3列的二维数组
  2. arr=np.linspace(0,9,num=9,endpoint=False).reshape((3,3))
  3. arr
  4. 输出:
  5. array([[ 0., 1., 2.],
  6. [ 3., 4., 5.],
  7. [ 6., 7., 8.]])
  1. #将数组的行倒序
  2. arr[::-1]
  3. 输出:
  4. array([[ 6., 7., 8.],
  5. [ 3., 4., 5.],
  6. [ 0., 1., 2.]])
  1. #将数组的列倒序
  2. arr[:,::-1]
  3. 输出:
  4. array([[ 2., 1., 0.],
  5. [ 5., 4., 3.],
  6. [ 8., 7., 6.]])
  1. #全倒置
  2. arr[::-1,::-1]
  3. 输出:
  4. array([[ 8., 7., 6.],
  5. [ 5., 4., 3.],
  6. [ 2., 1., 0.]])
3、 图片倒置

读取图片

  1. import matplotlib.pyplot as plt
  2. img=plt.imread(r'./虎.jpg')
  3. type(img)
  4. 输出:
  5. numpy.ndarray
  1. #显示图片
  2. plt.imshow(img)
  3. plt.show()

左右倒置图片

  1. img_lr=img[::,::-1]
  2. plt.imshow(img_lr)
  3. plt.show()

上下倒置图片

  1. img_ab=img[::-1]
  2. plt.imshow(img_ab)
  3. plt.show()

全倒置图片

  1. img_all=img[::-1,::-1]
  2. plt.imshow(img_all)
  3. plt.show()

4、变形

使用arr.reshape()函数,注意参数是一个tuple(元组)!

  • 基本使用
4.1 将一维数组变形成多维数组
  1. #创建一个随机数在[1,800)的10个元素的一维数组
  2. arr=np.random.randint(1,800,size=(10,))
  3. arr.shape
  4. 输出:(10,)
  1. #将一维数组变形成2行5列的二维数组
  2. arr2=arr.reshape((2,5))
  3. arr2.shape
  4. 输出:
  5. (2, 5)

使用-1自动计算行数(或列数)

  1. #将一维数组变形成2行5列的二维数组
  2. arr2=arr.reshape((-1,5))
  3. arr2.shape
  4. 输出:
  5. (2, 5)
  1. #将一维数组变形成2行5列的二维数组
  2. arr2=arr.reshape((2,-1))
  3. arr2.shape
  4. 输出:
  5. (2, 5)
4.2 将多维数组变形成一维数组
  1. #将arr2变形成一维数组
  2. arr3=arr2.reshape(10)
  3. arr3.shape
  4. 输出:(10,)

使用-1自动计算元素个数

  1. arr=arr2.reshape(-1)
  2. arr.shape
  3. 输出:(10,)
5、级联
  • np.concatenate()
5.1、一维,二维,多维数组的级联

一维

  1. a1=np.array([1,2,3])
  2. np.concatenate([a1,a1])
  3. 输出:
  4. array([1, 2, 3, 1, 2, 3])
  1. #创建两个二维数组
  2. a1=np.random.randint(0,100,size=(3,4))
  3. a2=np.random.randint(0,100,size=(3,4))

二维

  1. #创建两个二维数组
  2. a1=np.random.randint(0,100,size=(3,4))
  3. a2=np.random.randint(0,100,size=(3,4))
  1. a1
  2. 输出:
  3. array([[18, 53, 32, 84],
  4. [93, 28, 41, 26],
  5. [30, 20, 47, 6]])
  1. a2
  2. 输出:
  3. array([[14, 35, 15, 73],
  4. [90, 16, 58, 51],
  5. [69, 41, 4, 60]])

列跟列连在一起

  1. #axis=0表示纵向(列跟列连接在一起)级联
  2. np.concatenate([a1,a2],axis=0)
  3. 输出:
  4. array([[18, 53, 32, 84],
  5. [93, 28, 41, 26],
  6. [30, 20, 47, 6],
  7. [14, 35, 15, 73],
  8. [90, 16, 58, 51],
  9. [69, 41, 4, 60]])

行与行连接在一起

  1. #axis=1表示横向(行跟行连接在一起)级联
  2. np.concatenate([a1,a2],axis=1)
  3. 输出:
  4. array([[18, 53, 32, 84, 14, 35, 15, 73],
  5. [93, 28, 41, 26, 90, 16, 58, 51],
  6. [30, 20, 47, 6, 69, 41, 4, 60]])

axis参数的取值范围:取值范围是由级联的数组维度决定的 (0-(维度-1))

级联需要注意的点:

  • 级联的参数是列表:一定要加中括号或小括号
  • 维度必须相同
  • 形状相符:在维度保持一致的前提下,如果进行横向(axis=1)级联,必须保证进行级联的数组行数保持一致。如果进行纵向(axis=0)级联,必须保证进行级联的数组列数保持一致。
  • 可通过axis参数改变级联的方向
5.2 np.hstack与np.vstack

水平级联与垂直级联,代替axis参数。

  1. np.hstack((a1,a2))
  2. 输出:
  3. array([[18, 53, 32, 84, 14, 35, 15, 73],
  4. [93, 28, 41, 26, 90, 16, 58, 51],
  5. [30, 20, 47, 6, 69, 41, 4, 60]])
  1. np.vstack((a1,a2))
  2. 输出:
  3. array([[18, 53, 32, 84],
  4. [93, 28, 41, 26],
  5. [30, 20, 47, 6],
  6. [14, 35, 15, 73],
  7. [90, 16, 58, 51],
  8. [69, 41, 4, 60]])
6、 合并照片
  1. img=plt.imread(r'./虎.jpg')
  2. img.shape
  3. 输出:
  4. (738, 389, 3)
  1. plt.imshow(img)
  2. plt.show()

  1. #上下合并
  2. img_v=np.concatenate((img,img),axis=0)
  3. img_v.shape
  4. 输出:
  5. (738, 389, 3)
  1. plt.imshow(img_v)
  2. plt.show()

  1. #左右合并
  2. img_h=np.concatenate((img,img),axis=1)
  3. img_h.shape
  4. 输出:
  5. (369, 778, 3)
  1. plt.imshow(img_h)
  2. plt.show()

7、 切分

与级联类似,三个函数完成切分工作:

  • np.split(arr,行/列号,轴):参数2是一个列表类型
  • np.vsplit(arr,行/列号) 水平切
  • np.hsplit(arr,行/列号) 垂直切
  • 返回值是一个列表
  1. arr=np.array([[3,2,4],[9,5,8],[2,7,1]])
  2. arr
  3. 输出:
  4. array([[3, 2, 4],
  5. [9, 5, 8],
  6. [2, 7, 1]])

np.split()

  1. #切分第1、2列(下标从0开始),切两刀,返回一个列表
  2. np.split(arr,[1,2],axis=1)
  3. 输出:
  4. [array([[3],
  5. [9],
  6. [2]]), array([[2],
  7. [5],
  8. [7]]), array([[4],
  9. [8],
  10. [1]])]

np.vsplit()

  1. #切分第1行(下标从0开始),切一刀,返回一个列表
  2. np.vsplit(arr,[1])
  3. 输出:
  4. [array([[3, 2, 4]]), array([[9, 5, 8],
  5. [2, 7, 1]])]

np.hsplit()

  1. #切分第1列(下标从0开始),切一刀,返回一个列表
  2. np.hsplit(arr,[1])
  3. 输出:
  4. [array([[3],
  5. [9],
  6. [2]]), array([[2, 4],
  7. [5, 8],
  8. [7, 1]])]
8、 切分照片
  1. #axis=0,水平切
  2. img=plt.imread(r'./虎.jpg')
  3. img.shape
  4. 输出:
  5. (369, 389, 3)
  1. img_list=np.split(img,[170],axis=0)
  2. plt.imshow(img_list[0])
  3. plt.show()

9、 副本

所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象的操作也对原来的对象生效。

  1. a=np.array([1,2,3,4,5])
  2. a1=a
  3. a[1]=222
  4. a
  5. 输出:
  6. array([ 1, 222, 3, 4, 5])
  1. a1
  2. 输出:
  3. array([ 1, 222, 3, 4, 5])

可使用copy()函数创建副本

  1. a=np.array([1,2,3,4,5])
  2. a1=a.copy()
  1. a[1]=222
  2. a
  3. 输出:
  4. array([ 1, 222, 3, 4, 5])
  1. a1
  2. 输出:
  3. array([1, 2, 3, 4, 5])
10、 ravel() 数组扁平化

方式1:np.ravel(a,order=‘C’)

方式2:ndarray.racel(order=‘C’)

把多维数组扁平化成一维数组。参数’C’表示按行进行扁平,'F’表示按列进行扁平。

  1. #创建二维数组
  2. arr1=np.array([[1,2],[3,4]])
  3. arr1

  1. arr1.ravel(order='C')

  1. arr1.ravel(order='F')

  1. np.ravel(arr1)

  1. np.ravel(arr1,order='F')

11、np.c_[arr1,arr2,…] 数组合并

把多个数组合并成一个数组。

  1. arr1=np.array([1,2,3,4])
  2. arr1
  3. 结果为:
  4. array([1, 2, 3, 4])
  1. np.c_[arr1,arr1]
  2. 结果为:
  3. array([[1, 1],
  4. [2, 2],
  5. [3, 3],
  6. [4, 4]])

多维数组:

  1. #创建三维数组
  2. arr2=np.array([[[1,2,3],[4,5,6],[7,8,9]]])
  3. arr2
  4. 结果为:
  5. array([[[1, 2, 3],
  6. [4, 5, 6],
  7. [7, 8, 9]]])
  1. np.c_[arr2,arr2,arr2]
  2. 结果为:
  3. array([[[1, 2, 3, 1, 2, 3, 1, 2, 3],
  4. [4, 5, 6, 4, 5, 6, 4, 5, 6],
  5. [7, 8, 9, 7, 8, 9, 7, 8, 9]]])
12、获取数组不重复的值

np.unique(ar,return_counts=False)

参数ar:数组

参数return_counts:返回每个元素出现的次数

返回值是一个 元组。

  1. arr=np.array([11,1,2,3,4,11,3,5])
  2. np.unique(arr,return_counts=True)

13、使用dispkay()显示多个数组
  1. #导入包
  2. from IPython.display import display
  1. a=np.array([1,2,3,4])
  2. b=np.array([5,6,7])
  3. display(a,b)

五、ndarray的聚合操作

1、 求和np.sum

一维

  1. arr=np.linspace(0,10,10,endpoint=False)
  2. arr
  3. 输出:
  4. array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
  1. np.sum(arr,axis=0)
  2. 输出:
  3. 45.0

二维

  1. np.random.seed(8)
  2. arr2=np.random.randint(0,10,size=(3,4))
  3. arr2
  4. 输出:
  5. array([[3, 4, 1, 9],
  6. [5, 8, 3, 8],
  7. [0, 5, 1, 3]])

axis=0,列相加

  1. np.sum(arr2,axis=0)
  2. 输出:
  3. array([ 8, 17, 5, 20])

axis=1,行相加

  1. np.sum(arr2,axis=1)
  2. 输出:
  3. array([17, 24, 9])
2、 最大最小值:np.max/ np.min
  1. np.random.seed(8)
  2. arr2=np.random.randint(0,10,size=(3,4))
  3. arr2
  4. 输出:
  5. array([[3, 4, 1, 9],
  6. [5, 8, 3, 8],
  7. [0, 5, 1, 3]])

axis=0,列最小值

  1. np.min(arr2,axis=0)
  2. 输出:
  3. array([0, 4, 1, 3])

axis=1,行最小值

  1. np.min(arr2,axis=1)
  2. 输出:
  3. array([1, 3, 0])
3、 平均值:np.mean()
  1. arr2=np.array([[1,2,3],[3,4,5]])
  2. arr2
  3. 输出:
  4. array([[1, 2, 3],
  5. [3, 4, 5]])

axis=0,列平均值

  1. np.mean(arr2,axis=0)
  2. 输出:
  3. array([ 2., 3., 4.])

axis=1,行平均值

  1. np.mean(arr2,axis=1)
  2. 输出:
  3. array([ 2., 4.])
4、 其他聚合操作
  1. Function Name NaN-safe Version Description
  2. np.sum np.nansum Compute sum of elements
  3. np.prod np.nanprod Compute product of elements
  4. np.mean np.nanmean Compute mean of elements
  5. np.std np.nanstd Compute standard deviation
  6. np.var np.nanvar Compute variance
  7. np.min np.nanmin Find minimum value
  8. np.max np.nanmax Find maximum value
  9. np.argmin np.nanargmin Find index of minimum value
  10. np.argmax np.nanargmax Find index of maximum value
  11. np.median np.nanmedian Compute median of elements
  12. np.percentile np.nanpercentile Compute rank-based statistics of elements
  13. np.any N/A Evaluate whether any elements are true
  14. np.all N/A Evaluate whether all elements are true
  15. np.power 幂运算

六、ndarray的矩阵操作

1、 基本矩阵操作
1.1算术运算符:
  • 加减乘除
  1. #创建一个3行3列的二维数组x1
  2. x1 = np.arange(9.0).reshape((3, 3))
  3. x1
  4. 输出:
  5. array([[ 0., 1., 2.],
  6. [ 3., 4., 5.],
  7. [ 6., 7., 8.]])
  1. #创建一个3个元素的一维数组x2
  2. x2 = np.arange(3.0)
  3. x2
  4. 输出:
  5. array([ 0., 1., 2.])

x1+x2

  1. x1+x2
  2. 输出:
  3. array([[ 0., 2., 4.],
  4. [ 3., 5., 7.],
  5. [ 6., 8., 10.]])

x2会自动补全成

array([[ 0., 1., 2.],
[ 0., 1., 2.],
[ 0., 1., 2.]])

再和x1相加,对应的元素相加。【广播机制】

1.2 矩阵积np.dot()

两个集合中,a的行数和b的列数必须保持一致

  1. arr1=np.array([[1,2],[3,4]])
  2. arr1
  3. 输出:
  4. array([[1, 2],
  5. [2, 3]])
  1. arr2=np.array([[5,6],[7,8]])
  2. arr2
  3. 输出:
  4. array([[5, 6],
  5. [7, 8]])
  1. np.dot(arr1,arr2)
  2. 输出:
  3. array([[19, 22],
  4. [31, 36]])
1.3 逆矩阵

函数np.linalg.inv()
矩阵相乘:行和列相同,行乘列。

  1. #导包
  2. import numpy as np
  3. from IPython.display import display
  1. # 创建两个二维数组
  2. a = np.random.randint(0,10,size = (2,3))
  3. b = np.random.randint(0,10,size = (3,4))
  4. display(a,b)

  1. #矩阵点乘:行乘列:8*0+4*8+4*4 = 48
  2. np.dot(a,b)

  1. #单元矩阵:a_T*a
  2. unit_a = np.dot(a_T,a)
  3. # 逆矩阵的求解:
  4. nverse_matrix = np.linalg.inv(unit_a)
  5. nverse_matrix

2、广播机制

【重要】ndarray广播机制的三条规则:缺失维度的数组将维度补充为进行运算的数组的维度。缺失的数组元素使用已有元素进行补充。

  • 规则一:为缺失的维度补1(进行运算的两个数组之间的维度只能相差一个维度)
  • 规则二:缺失元素用已有值填充
  • 规则三:缺失维度的数组只能有一行或者一列

例1: m = np.ones((2, 3)) a = np.arange(3) 求m+a

  1. m=np.ones((2,3))
  2. a=np.arange(3)
  1. m
  2. 输出:
  3. array([[ 1., 1., 1.],
  4. [ 1., 1., 1.]])
  1. a
  2. 输出:
  3. array([0, 1, 2])
  1. m+a
  2. 输出:
  3. array([[ 1., 2., 3.],
  4. [ 1., 2., 3.]])

七、ndarray的排序

1、快速排序
1.1 np.sort()不改变输入
1.2 ndarray.sort()本地处理,不占用空间,但改变输入
  1. np.random.seed(3)
  2. arr=np.random.randint(0,10,size=(3,4))
  3. arr
  4. 输出:
  5. array([[8, 9, 3, 8],
  6. [8, 0, 5, 3],
  7. [9, 9, 5, 7]])
  1. #默认排序,对行进行从小到大的排序,参数axis默认为-1
  2. np.sort(arr)
  3. 输出:
  4. array([[3, 8, 8, 9],
  5. [0, 3, 5, 8],
  6. [5, 7, 9, 9]])
  1. #np.sort(arr)不改变arr,arr和原来一样
  2. arr
  3. 输出:
  4. array([[8, 9, 3, 8],
  5. [8, 0, 5, 3],
  6. [9, 9, 5, 7]])
  1. #axis=0,按列进行排序
  2. np.sort(arr,axis=0)
  3. 输出:
  4. array([[8, 0, 3, 3],
  5. [8, 9, 5, 7],
  6. [9, 9, 5, 8]])
  1. #按行进行排序
  2. np.sort(arr,axis=1)
  3. 输出:
  4. array([[3, 8, 8, 9],
  5. [0, 3, 5, 8],
  6. [5, 7, 9, 9]])

arr.sort()会改变arr

  1. #有一个参数axis,默认为-1,按行排序
  2. arr.sort()
  3. arr
  4. 输出:
  5. array([[3, 8, 8, 9],
  6. [0, 3, 5, 8],
  7. [5, 7, 9, 9]])
2、部分排序

np.partition(a,k)

有的时候我们不是对全部数据感兴趣,我们可能只对最小或最大的一部分感兴趣。

  • 当k为正时,我们想要得到最小的k个数
  • 当k为负时,我们想要得到最大的k个数
  1. np.random.seed(3)
  2. arr=np.random.randint(0,10,size=(3,4))
  3. arr
  4. 输出:
  5. array([[8, 9, 3, 8],
  6. [8, 0, 5, 3],
  7. [9, 9, 5, 7]])
  1. np.partition(arr,-3)
  2. 输出:
  3. array([[3, 8, 9, 8],
  4. [0, 3, 5, 8],
  5. [5, 7, 9, 9]])

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

python常用模块numpy解析(详解)的更多相关文章

  1. python OptParse模块的用法详解

    OptParse模块的简单介绍 Python 有两个内建的模块用于处理命令行参数: 一个是 getopt只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成 ...

  2. python常用内置函数详解

    1.abs(x) 返回一个数字的绝对值.参数可以是整数或浮点数.如果参数是复数,则返回它的大小 n = abs(-12.5) print(n) # 12.5 2.all(iterable) 如果所有的 ...

  3. Python Importlib模块与__import__详解

    Importlib模块与__import__都可以通过过字符串来导入另外一个模块,但在用法上和本质上都有很大的不同. 以一个例子为证: 以下为我的工程目录结构: lib/test.py: name = ...

  4. python pickle 模块的使用详解

    用于序列化的两个模块 json:用于字符串和Python数据类型间进行转换 pickle: 用于python特有的类型和python的数据类型间进行转换 json提供四个功能:dumps,dump,l ...

  5. Python OS模块常用功能 中文图文详解

    一.Python OS模块介绍 OS模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作. 可以查看OS模块的帮助文档: >>> i ...

  6. python中argparse模块用法实例详解

    python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...

  7. Python中random模块生成随机数详解

    Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...

  8. Python模块调用方式详解

    Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...

  9. Python Deque 模块使用详解,python中yield的用法详解

    Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. https://blog.csdn.net/qq_3 ...

随机推荐

  1. Tomcat学习小记(一)

    1.Tomcat概述 Tomcat 服务器是一个开源的轻量级Web应用服务器,擅长处理动态资源,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet.JSP 程序的首选. Tomcat ...

  2. Spring学习(五)--Spring的IOC

    1.BeanDefinition在IOC的注册 当BeanDefinition完成载入和解析之后,用户定义的BeanDefinition在IOC容器中已经建立自己的数据结构和数据表示,但是无法使用,需 ...

  3. JD-GUI反编译jar包为Java源代码

    程序员难免要借鉴其他java工程的代码.可有时只能拿到.calss文件,jar包或者war包,这个时候要求程序员能熟练的将这些类型文件反编译为Java代码并形成可编译运行的项目.本文介绍的反编译工具是 ...

  4. 引用类型之Object

    引用类型 引用类的值(对象)是引用类型的一个实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起. 对象是某个特定引用类型的实例.新对象是使用new操作符后跟一个构造函数 ...

  5. 058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值

    058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值 本文知识点:求数组元素的最大值 案例:求数组元素的最大值 程序代码及其执行过程 ...

  6. 使用 PL/SQL Developer 导入 .sql 文件

    操作系统:Windows 10 x64 PL/SQL Developer Version 12.0.7.1837 (64 bit) 01.226959 第一节:下载 Oracle Database X ...

  7. 题解 SP1026 【FAVDICE - Favorite Dice】

    首先,这是一道经典的期望dp题 因为最终状态 $ (所有面都被筛到过) $ 是确定的,所以才用 逆推 ,设状态 $ f[i] $ 表示已经筛到了 $ i $ 个不同的面,有 $ i\over n $ ...

  8. 关于freemodbus协议中eMBFuncReadHoldingRegister()函数的所谓错误

    摘要:网上看到有好心的网友提示,freemodbus协议中的mbfuncholding.c 文件中eMBFuncReadHoldingRegister()函数,有一处错误,即:第185行的" ...

  9. Java泛型的协变与逆变

    泛型擦除 Java的泛型本质上不是真正的泛型,而是利用了类型擦除(type erasure),比如下面的代码就会出现错误: 报的错误是:both methods  have same erasure ...

  10. UDP协议网络Socket编程(java实现C/S通信案例)

    我的博客园:https://www.cnblogs.com/chenzhenhong/p/13825286.html 我的CSDN博客:https://blog.csdn.net/Charzous/a ...