Python 学习 第22篇:numpy 操作

numpy模块内置的函数能够对数组进行复杂而高效的操作,这些函数中都有一个参数axis(轴)。在数组中,轴表示维度,对于二维数组,axis参数的取值通常有:

  • 当axis为None,表示把数组展开为一维数组;
  • 当axis为0时,表示按照列(第一维)进行计算;
  • 当axis=1时,表示按照行(第二维)进行计算。

一,排序sort

sort(axis,kind)函数用于对数组进行排序,可以使用类方法numpy.sort(),返回的是数组的已排序的副本,而原始数组并没有改变;也可以使用对象方法obj.sort(),原始数组排序。

numpy.sort(a, axis=1, kind='quicksort')

参数注释:

  • a:所需排序的数组
  • axis:数组排序时的轴,axis=0排序;axis=1按行排序,默认值是1
  • kind:数组排序时使用的方法,其中:kind= ′quicksort ′为快排;kind=′mergesort′ 为归并排序;kind=′heapsort′为堆排
  • axis指定排序的轴;kind指定排序算法,默认的排序算法是快速排序,np.sort()返回的是数组的已排序的副本,而就是排序则会修改数组本身。

举个例子,对数组进行排序:

import numpy as np

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

r1=np.sort(a)
r2=np.sort(a,axis=0)
r3=np.sort(a,axis=1)

print('a.sort() = {0}\na.sort(axis=0) = {1}\na.sort(axis=1) ={2}'.format(r1,r2,r3))

二,argsort()函数

argsort()函数返回的是按照数组值从小到大的索引值,即返回的是索引值,索引值是按照元素值从小到大得到的。

x=np.array([1,4,3,-1,6,9])
y=np.argsort(x)
#output
array([3, 0, 2, 1, 4, 5], dtype=int64)

元素-1的值是最小的,其索引是3,因此,argsort()的返回列表中是第一个item。

argsort()函数是将x中的元素从小到大排列提取其对应的index(索引),然后输出到y,按照降序排序:

y=np.argsort(-x)

按照升序排序:

y=np.argsort(x)

三,vectorize 向量化

numpy.vectorize()函数定义一个向量化函数,它以序列或numpy数组作为输入,对numpy数组做向量化操作。函数输出的数据类型是由otypes参数确定的,如果otypes=None,那么输出的数据类型是通过使用输入的第一个元素调用函数来确定的,该函数返回一个函数对象。

numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)

参数注释:

  • pyfunc:函数对象
  • otype:输出数据的类型(putput data type)

使用vectorize()定义一个向量化函数,对数组做向量化操作:

def myfunc(a, b):
    return a-b if a>b else a+b

vfunc = np.vectorize(myfunc)
vfunc([1, 2, 3, 4], 2)
#output array([3, 4, 1, 2])

四,reshap

reshap(array,newshape) :返回一个给定shape的数组的副本,例如,下面的代码把一个一维数组转换为4行2列的二位数组:

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

五,flatten

返回展平数组,原数组不改变

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

六,计算元素的和/积

numpy计算元素的和/积,在语法上相似。

1,求和

numpy对象的函数:sum(axis)

参数axis是轴,对于二维数组,axis的取值有None、0和1:

  • 当参数为None时,把二维数组中的所有元素相加;
  • 当参数为0时,把二维数组中,按照列对元素相加;
  • 当参数为1时,把二维数组中,按照行对元素相加;

举个例子,创建一个二维数组,按照行和列分别求和:

import numpy as np

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

r1=a.sum()
r2=a.sum(axis=0)
r3=a.sum(axis=1)

print('a.sum() = {0}\na.sum(axis=0) = {1}\na.sum(axis=1) ={2}'.format(r1,r2,r3))

2,求积

计算元素的积:prod(axis)

参数axis是轴,对于二维数组,axis的取值有None、0和1:

  • 当参数为None时,把二维数组中的所有元素相乘;
  • 当参数为0时,把二维数组中,按照列对元素相乘;
  • 当参数为1时,把二维数组中,按照行对元素相乘;

举个例子,创建一个二维数组,按照行和列分别求乘积:

import numpy as np

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

r1=a.prod()
r2=a.prod(axis=0)
r3=a.prod(axis=1)

print('a.prod() = {0}\na.prod(axis=0) = {1}\na.prod(axis=1) ={2}'.format(r1,r2,r3))

七,计算统计量

对numpy对象计算,常用的统计量是:

  • mean(axis):计算元素的均值
  • var(axis):计算元素的方差
  • std(axis) :计算元素标准差
  • max(axis):计算元素的最大值
  • min(axis):计算元素的最小值
  • ptp(axis):计算元素的取值范围,即最大值和最小值的差值
  • median(axis):计算元素的中位数

举个例子,计算数组的均值:

import numpy as np

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

r1=a.mean()
r2=a.mean(axis=0)
r3=a.mean(axis=1)

print('a.mean() = {0}\na.mean(axis=0) = {1}\na.mean(axis=1) ={2}'.format(r1,r2,r3))

八,最大值或最小值的索引

计算数组中最大值和最小值的索引:

  • argmax(axis):返回最大值的索引
  • argmin(axis):返回最小值的索引

举个例子,返回数组中最小值的索引:

import numpy as np

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

r1=a.argmin()
r2=a.argmin(axis=0)
r3=a.argmin(axis=1)

print('a.argmin() = {0}\na.argmin(axis=0) = {1}\na.argmin(axis=1) ={2}'.format(r1,r2,r3))

参考文档:

numpy中sum(axis=0)和axis=1的计算原理

猜你喜欢

转载自www.cnblogs.com/ljhdo/p/10275607.html