numpy数组——轴向操作及通用函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jakob_Hu/article/details/88919287

数组转置和轴对换

数组的转置(transpose)是很常见的一种矩阵变换,numpy数组实现转置的方式有两种,一种是使用数组的T属性,另一种是使用numpy中定义的 transpose方法

T属性的用法很简单,一个T属性就能使得矩阵的轴交换,
在这里插入图片描述
对于高维数组,使用transpose方法需要得到由轴编号组成的元组
在这里插入图片描述
这两个方法返回的都是视图,而不是复制的副本。

通用函数

以下介绍的函数都是元素级的函数,

1)一元函数

在这里插入图片描述
在这里插入图片描述

# 各元素绝对值
np.fabs(-1)                  # 返回 1.0
np.fabs([-1.2, 1.2])         # 返回 array([ 1.2, 1.2])

# 各元素的平方
np.square([-1j, 1])          # 返回 array([-1.-0. j, 1.+0. j])    蓝色标记实部,红色标记虚部

各元素的平方根和 exp
在这里插入图片描述
对数函数使用

np.log([1,  np.e, np.e**2,  0])   # 返回array([ 0., 1., 2., -Inf]),默认的log是自然底数e,即 ln

# 同样是计算 ln(1+x)两个方法得到的结果是不同的,log直接计算会有误差
np.log1p(1e-99)              # 返回1e-99,log1p计算的是 log(1+x)的值,即 ln(1+x)
np.log(1 + 1e-99)            # 返回 0.0

x = np.array([0, 1, 2, 2**4])
np.log2(x)        			  # 返回 array([-Inf, 0., 1., 4.]),计算 log2
np.log10([1e-15, -3.])        # 返回array([-15., NaN]),计算 log10

ln(1+x)使用泰勒展开,

f(x)= f(0)+ f′(0)x+ f″(0)x ²/ 2!+…+ fⁿ(0)… f(x)= ln(x+1) f(0)=ln1=0

可见,log的一系列方法计算传入的值可以是列表、数值和数组。

2)二元函数

在这里插入图片描述

#add的使用,The sum of x1 and x2, element-wise. Returns a scalar(标量) if both x1 and x2 are scalars.
np.add(1.0, 4.0)            #返回 5.0,两个都是标量则返回标量
x1 = np.arange(9.0).reshape((3, 3))        # 返回 array([[ 0., 1., 2.], 
                                           #			[ 3., 4., 5.], 
                                           #			[ 6., 7., 8.]])
x2 = np.arange(3.0)         # 返回 array([ 0., 1., 2.])
np.add(x1, x2)              # 返回 array([[ 0., 2., 4.], 
                                                                                            [ 3., 5., 7.], 
                                                                                            [ 6., 8., 10.]])

#substract使用,The difference of x1 and x2, element-wise. Returns a scalar if both x1 and x2 are scalars.
np.subtract(1.0, 4.0)        # 返回 -3.0,两个都是标量则返回标量
x1 = np.arange(9.0).reshape((3, 3))
x2 = np.arange(3.0)
np.subtract(x1, x2)           # 返回 array([[ 0., 0., 0.], 
                              #            [ 3., 3., 3.], 
                              #            [ 6., 6., 6.]])

#multiply使用
np.multiply(2.0, 4.0)         # 返回 8.0,两个都是标量则返回标量
x1 = np.arange(9.0).reshape((3, 3))
x2 = np.arange(3.0)
np.multiply(x1, x2)            # 返回 array([[ 0., 1., 4.], 
                               #            [ 0., 4., 10.], 
                               #            [ 0., 7., 16.]])

#divide使用
np.divide(2.0, 4.0)            #返回 0.5
x1 = np.arange(9.0).reshape((3, 3))
x2 = np.arange(3.0)
np.divide(x1, x2)                # 返回 array([[ NaN, 1. , 1. ], 
                                 #            [ Inf, 4. , 2.5], 
								 #            [ Inf, 7. , 4. ]])


#power使用
# 传入一组基,和一个值
x1 = range(6)        #返回  [0, 1, 2, 3, 4, 5]
np.power(x1, 3)    #返回 array([ 0, 1, 8, 27, 64, 125])


# 传入两组基,两组基必须是相同的空间复杂度
x2 = [1.0, 2.0, 3.0, 3.0, 2.0, 1.0]
np.power(x1, x2)    #返回 array([ 0., 1., 8., 27., 16., 5.])


# 传入一组基和一个数组
x2 = np.array([[1, 2, 3, 3, 2, 1], [1, 2, 3, 3, 2, 1]])        
# 返回 array([[1, 2, 3, 3, 2, 1], 
#			 [1, 2, 3, 3, 2, 1]])

np.power(x1, x2)                                                            
# 返回 array([[ 0, 1, 8, 27, 16, 5], 
#			 [ 0, 1, 8, 27, 16, 5]])

# 传入两个数组(形状必须相同)
l = np.array([[1, 2, 3, 3, 2, 1], [1, 2, 3, 3, 2, 1]])        
# 返回 array([[1, 2, 3, 3, 2, 1],
#			 [1, 2, 3, 3, 2, 1]])

m = np.array([[1, 2, 4, 0, 2, 1], [1, 2, 3, 5, 10, 1]])    
# 返回 array([[ 1,  2,  4,  0,  2,  1],
#			 [ 1,  2,  3,  5, 10,  1]])

np.power(l,m)                                                               
# 返回 array([[   1,    4,   81,    1,    4,    1],
#			 [   1,    4,   27,  243, 1024,    1]])

max和min方法,只演示max,min同理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
mod方法
在这里插入图片描述
greater、logical_end方法

If the inputs are ndarrays, then np.greater is equivalent to ‘>’.

np.greater([4,2],[2,2])        	# 返回 array([ True, False], dtype=bool)
#当两个参数都是数组时候,相当于 > 符号
a = np.array([4,2])
b = np.array([2,2])
a > b                           # 返回 array([ True, False], dtype=bool)


#logical_and方法
#传入两个布尔值
np.logical_and(True, False)     # 返回 False
#传入两个布尔型数组
np.logical_and([True, False], [False, False])        #返回 array([False, False])
#用于对一个数组添加条件,参数是两个对数组的判断
x = np.arange(5)

np.logical_and(x>1, x<4)        #返回 array([False, False, True, True, False])

数组排序

数组的排序使用的是 sort方法

a = np.array([[1,4],[3,1]])         # array([[1, 4],
                                    #        [3, 1]])
np.sort(a)                          
# 返回  array([[1, 4], 
#             [1, 3]])       sort along the last axis,默认是最后一个轴进行排序

#axis参数使用
np.sort(a, axis=None)     # 返回 array([1, 1, 3, 4])  axis参数为None时候,将多维数组转为一维 
np.sort(a, axis=0)        # 返回 array([[1, 1], 
                          #            [3, 4]])    也可以指定按照其他的轴进行排序

#order参数使用
dtype = [('name', 'S10'), ('height', float), ('age', int)]    
values = [('Arthur', 1.8, 41), ('Lancelot', 1.9, 38),('Galahad', 1.7, 38)]

a = np.array(values, dtype=dtype)      # create a structured array,这个数组相当于有字段名
np.sort(a, order='height')        
# 返回 array([('Galahad', 1.7, 38), 
#            ('Arthur', 1.8, 41), 
#            ('Lancelot', 1.8999999999999999, 38)], 
# dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])

# Sort by age, then height if ages are equal,这里相当于设定了sort的顺序
np.sort(a, order=['age', 'height'])           
# 返回 array([('Galahad', 1.7, 38), 
#			 ('Lancelot', 1.8999999999999999, 38),
#			 ('Arthur', 1.8, 41)], 
# dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])

sort方法返回的是副本,而不是视图

一维数组方法

在这里插入图片描述
numpy的 unique方法,返回的是去重复后且经过排序的数组,
在这里插入图片描述
np.in1d方法
在这里插入图片描述
intersect1d、union1d和 setdiff1d方法

#传入列表或者数组都行
np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1])        #返回 array([1, 3])

a = np.array([1, 2, 3, 2, 4, 1])
b = np.array([3, 4, 5, 6])
np.setdiff1d(a, b)                            #返回 array([1, 2])

setxor1d方法

a = np.array([1, 2, 3, 2, 4])
b = np.array([2, 3, 5, 7, 5])
np.setxor1d(a,b)                            #返回 array([1, 4, 5, 7])

合并numpy数组使用 concatenate方法
在这里插入图片描述
concatenate方法可以同时合并两个以上的numpy数组。
在这里插入图片描述

布尔型数组方法

布尔型数组的true和false有时能被转换为 1和0。比如sum方法就是对布尔型数组中的True进行计数的方法。
在这里插入图片描述
还有两个方法any和all,两个方法都是用于判断,返回值是布尔值。其中,any用于判断布尔型数组中是否存在True;all则是判断布尔型数组中的元素是否都是True。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Jakob_Hu/article/details/88919287