numpy数组中一些常见的操作以及用法举例
Posted 非晚非晚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了numpy数组中一些常见的操作以及用法举例相关的知识,希望对你有一定的参考价值。
文章目录
这篇文章是为了解读一些
常用的numpy数组
操作,同时也是为了加深自己对numpy的理解。如果后续碰到比较实用的操作,也会同步至这篇文章。
不得不说,numpy的操作实在是太多了,好的方法是边学边用,随时用随时查
。如果想要全面学习,或者只是想查询某个函数的功能,可以访问官网,官网有一个非常全面的教程方法,是一个学习numpy的绝佳去处。
1. 数组与标量的计算
运算符操作 | 含义 |
---|---|
a+1 | a的所有元素加1 |
a - 1 | a的所有元素减1 |
a*3 | a的所有元素乘以3 |
1/a | 1除以所有a中的元素 |
1//a | 1除以所有a中的元素,并取整 |
a**0.5 | a的所有元素取0.5次方 |
代码举例:
import numpy as np
a = np.array([1,2,3,4]).reshape(2,2)
print(a+2) #加法
'''
[[3 4]
[5 6]]
'''
print(a*3) #乘法
'''
[[ 3 6]
[ 9 12]]
'''
print(1//a) #整除
'''
[[1 0]
[0 0]]
'''
print(a**0.5) #开根号
'''
[[1. 1.41421356]
[1.73205081 2. ]]
'''
2. 两个数组之间的数学计算
运算符操作 | 含义 |
---|---|
a+b | a,b对应元素相加 |
a-b | a,b对应元素相减 |
a*b | a,b对应元素相乘 |
a/b | a,b对应元素相除 |
a//b | a,b对应元素相整除 |
np.multiply(a, b) | 点乘,同*号 |
np.dot(a,b) | 内积 |
np.matmul | 叉乘 |
代码举例:
import numpy as np
a = np.array([1.2,2.6,-3.9,4.5]).reshape(2,2)
b = np.array([-2.6,3.6,2.8,13.6]).reshape(2,2)
print(a*b)
'''
[[ -3.12 9.36]
[-10.92 61.2 ]]
'''
print(a//b)
'''
[[-1. 0.]
[-2. 0.]]
'''
3. 数组一元函数的数学操作
函数 | 含义 |
---|---|
numpy.sqrt(array) | 平方根函数 |
numpy.exp(array) | e^array[i]的数组 |
numpy.abs/fabs(array) | 计算绝对值 |
numpy.square(array) | 计算各元素的平方,等于array**2 |
numpy.log/log10/log2(array) | 计算各元素的各种对数 |
numpy.sign(array) | 计算各元素正负号 |
numpy.isnan(array) | NaN(not a number):不等于任何浮点数 |
numpy.isinf(array) | inf:比任何浮点数都大 |
numpy.cos/cosh/sin/sinh/tan/tanh(array) | 三角函数 |
numpy.modf(array) | 将array中值得整数和小数分离,作两个数组返回 |
numpy.ceil(array) | 向上取整,也就是取比这个数大的整数 |
numpy.floor(array) | 向下取整,也就是取比这个数小的整数 |
numpy.rint(array) | 四舍五入 |
numpy.trunc(array) | 向0取整 |
numpy.cos(array) | 正弦值 |
numpy.sin(array) | 余弦值 |
numpy.tan(array) | 正切值 |
numpy.sum(array) | 求和 |
numpy.cumsum(array) | 求前缀和 |
numpy.mean(array) | 求平均数 |
numpy.std(array) | 求标准差 |
numpy.var(array) | 求方差 |
numpy.min(array) | 求最小值 |
numpy.max(array) | 求最大值 |
numpy.argmin(array) | 求最小值索引 |
numpy.argmax(array) | 求最大值索引 |
numpy.media(array) | 奇数取中间数,偶数个则取中间两个数的平均值 |
代码举例:
import numpy as np
a = np.array([1.2,2.6,-3.9,4.5]).reshape(2,2)
print(np.rint(a)) #四舍五入
'''
[[ 1. 3.]
[-4. 4.]]
'''
print(np.abs(a)) #绝对值
'''
[[1.2 2.6]
[3.9 4.5]]
'''
print(np.sin(a)) #sin值
'''
[[ 0.93203909 0.51550137]
[ 0.68776616 -0.97753012]]
'''
print(np.sum(a)) #求和4.4
print(np.cumsum(a)) # 当前数与之前的所有数之和:[ 1.2 3.8 -0.1 4.4]
print(np.argmin(a)) #最小值索引:2
4. 数组二元函数的数学操作
函数 | 含义 |
---|---|
numpy.add(array1,array2) | 元素级加法 |
numpy.subtract(array1,array2) | 元素级减法 |
numpy.multiply(array1,array2) | 元素级乘法 |
numpy.divide(array1,array2) | 元素级除法 array1./array2 |
numpy.power(array1,array2) | 元素级指数 array1.^array2 |
numpy.maximum/minimum(array1,aray2) | 元素级最大值 |
numpy.fmax/fmin(array1,array2) | 元素级最大值,忽略NaN |
numpy.mod(array1,array2) | 元素级求模 |
numpy.copysign(array1,array2) | 将第二个数组中值得符号复制给第一个数组中值 |
numpy.greater/greater_equal/less/less_equal/equal/not_equal (array1,array2) | 元素级比较运算,产生布尔数组 |
numpy.logical_end/logical_or/logic_xor(array1,array2) | 元素级的真值逻辑运算 |
代码举例:
import numpy as np
a = np.array([1.2,2.6,-3.9,4.5]).reshape(2,2)
b = np.array([-2.6,3.6,2.8,13.6]).reshape(2,2)
print(np.add(a,b)) #元素的加法
'''
[[-1.4 6.2]
[-1.1 18.1]]
'''
print(np.multiply(a,b)) #元素乘法
'''
[[ -3.12 9.36]
[-10.92 61.2 ]]
'''
print(np.maximum(a,b)) #a,b之间的最大元素
'''
[[ 1.2 3.6]
[ 2.8 13.6]]
'''
print(np.copysign(a,b))#将b的符号给a
'''
[[-1.2 2.6]
[ 3.9 4.5]]
'''
5. 数组的常用属性
属性 | 含义 |
---|---|
dtype | 数组元素的数据类型 |
size | 数组元素的个数 |
ndim | 数组的维数 |
shape | 数组的维度大小(以元组形式) |
T | 数组的转置 |
代码举例:
import numpy as np
a = np.array([1,2,3,4]).reshape(2,2)
print(a.dtype) #类型:int64
print(a.ndim)#维度:2
print(a.shape)#数组大小(2,2)
print(a.size)#数组元素个数:4
print(a.T) #转置
'''
[[1 3]
[2 4]]
'''
6. 数组的常用方法
注意这里是方法,而不是函数。
方法 | 含义 |
---|---|
reshape | 不改变数据的条件下修改形状 |
flat | 不是方法,它是数组元素迭代器 |
flatten | 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组 |
ravel | 返回展开数组 |
其中flatten和ravel都可以选定展开的顺序:order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序。
import numpy as np
a = np.arange(4).reshape(2, 2)
for element in a.flat:
print(element,end=", ") # 0, 1, 2, 3,
print('\\n')
print (a.flatten()) #[0 1 2 3]
print (a.ravel(order = 'F')) #[0 2 1 3]
7. 随机操作
numpy.random 模块对 Python 内置的 random 进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数,如正态分布、泊松分布等。由于暂时还没有涉及到使用正态分布等内容的应用,所以这部分只是介绍一些简单实用的随机操作。
操作 | 意义 |
---|---|
random.rand() | 根据给定维度生成[0,1)之间的数据 |
random.randn() | 根据给定维度(不给维度时为单个数),产生符合标准正态分布 的随机数 |
random.normal() | 可定义均值和标准差的正态分布的随机数 |
random.randint() | 返回给定维度的随机整数 |
random.random()、random.random_sample() | 返回给定维度的[0,1)之间的随机数 |
random.choice() | 从给定的一维数组中生成随机数 |
代码举例:
import numpy as np
print(np.random.rand(3, 3)) #3 * 3维度的[0,1)的随机数
print(np.random.random((3, 3))) #3 * 3维度的[0,1)的随机数
print(np.random.randint(0, 2, size=(3, 3))) #3*3维度的[0,2]的随机整数
print(np.random.choice(['a', 'b', 'c'], p=[0.5, 0.3, 0.2])) #p的概率值和必须为1
8. 拼接数组
import numpy as np
a = np.arange(4).reshape(2,2)
b = np.array([[5,6],[7,8]])
c = np.concatenate((a,b),axis=1)#指定axis=1拼接,默认是axis=0拼接
'''
[[0 1 5 6]
[2 3 7 8]]
'''
c = np.concatenate((a,b))#默认axis=0
'''
[[0 1]
[2 3]
[5 6]
[7 8]]
'''
c=np.hstack([a,b])#横向拼接
'''
[[0 1 5 6]
[2 3 7 8]]
'''
c=np.vstack([a,b])#纵向拼接
'''
[[0 1]
[2 3]
[5 6]
[7 8]]
'''
b = np.array([[1,1],[1,1]])
c = np.append(b,a)#没有指定axis,则默认展成一维,如果有axis则如下所示。
'''
[1 1 1 1 0 1 2 3 4 5 6 7]
'''
append设置了axis的情况。
import numpy as np
a=[1,2,3]
b=[4,5]
c=[[6,7],[8,9]]
d=[[10,11],[12,13]]
print('在一维数组a后添加values,结果如下:0'.format(np.append(a,b,axis=0)))
print('沿二维数组c的行方向添加values结果如下:0'.format(np.append(c,d,axis=0)))
print('沿二维数组c的列方向添加values结果如下:0'.format(np.append(c,d,axis=1)))
#print('使用了axis,若arr和values的形状不同,则报错:'.format(np.append(a,c,axis=0)))
输出:
在一维数组a后添加values,结果如下:[1 2 3 4 5]
沿二维数组c的行方向添加values结果如下:[[ 6 7]
[ 8 9]
[10 11]
[12 13]]
沿二维数组c的列方向添加values结果如下:[[ 6 7 10 11]
[ 8 9 12 13]]
9. 切分数组
import numpy as np
a = np.arange(9)
print(np.split(a,[3,6]))#按照指定切分点对原数组进行切分
'''
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
'''
10. 插入和删除
import numpy as np
a = np.arange(8).reshape(2,4)
c = np.delete(a,[0,2],axis=1)#axis = 1上进行删除,0,2列
'''
[[1 3]
[5 7]]
'''
c = np.insert(a,1,5,axis=1)#axis=1上进行插入指定数值,第1列插入数字5
'''
[[0 5 1 2 3]
[4 5 5 6 7]]
'''
11. 数组扩展
numpy提供了tile函数和repeat方法,可以很轻松的将数组进行扩展。
import numpy as np
a = np.array([1,2,3])
print(np.tile(a,[3,1])) #复制成3行1列
'''
[[1 2 3]
[1 2 3]
[1 2 3]]
'''
print(a.repeat(3,axis=0))#在axis=0上面复制3行
'''
[1 1 1 2 2 2 3 3 3]
'''
a=np.array([[1,2,3]])
print(np.tile(a,[3,1])) #复制成3行1列
'''
[[1 2 3]
[1 2 3]
[1 2 3]]
'''
print(a.repeat(3,axis=0))#在axis=0上面复制3行
'''
[[1 2 3]
[1 2 3]
[1 2 3]]
'''
以上是关于numpy数组中一些常见的操作以及用法举例的主要内容,如果未能解决你的问题,请参考以下文章