Numpy中array(数组)
Numpy主要对象是齐次多维数组,由正整数元组索引,Numpy中维度称为轴(axis),数组的维数称为秩(rank)。
1.1 创建数组
常规方法创建数组
import numpy as np
#一维数组
a=np.array([2,3,4])
b=np.array([2.,3.,4.])
#二维数组
c=np.array([[1.,2.],[3.,4.]])
d=np.array([[1,2],[3,4]],dtype=complex)
print(a,a.dtype)
print(b,b.dtype)
print(c,c.dtype)
print(d,d.dtype)
>>>[2 3 4] int64
>>>[2. 3. 4.] float64
>>>[[1. 2.]
[3. 4.]] float64
>>>[[1.+0.j 2.+0.j]
[3.+0.j 4.+0.j]] complex128
利用函数创建数组
arange/ones/zeros/linspace/random.randint
#创建数组的常用函数
np.arange(0,7,1,dtype=float) #arange函数创建
>>>array([0., 1., 2., 3., 4., 5., 6.])
np.ones((2,3,4),dtype=int) #创建2页3行4列的数据
>>>array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]])
np.zeros((2,3,4)) #创建2页3行4列的零矩阵
>>>array([[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]],
[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]])
np.linspace(-1,2,5) #起点为-1,终点为2,取5个数
>>>array([-1. , -0.25, 0.5 , 1.25, 2. ])
np.random.randint(-9,3,(2,3)) #生成两行三列,大小为[-9,3)之间(左闭右开)的随机整数
>>>array([[-4, -8, -9],
[-4, -9, 1]])
1.2 修改数据
单个赋值/批量赋值/遍历赋值
#一维数组
a=np.arange(0,10,1)**2
>>>array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])
a[-1]=100 #单个赋值
>>>array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 100])
a[1:4]=100 #批量赋值
>>>array([ 0, 100, 100, 100, 16, 25, 36, 49, 64, 100])
b=[np.sqrt(np.abs(i)) for i in a] #通过a循环遍历赋值
print(b)
>>>[0.0, 10.0, 10.0, 10.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0]
1.3 数组输出
- 从左到右,从上到下
- 一维数组输出为行,二维数组输出为矩阵,三维数组输出为矩阵列表
1.4 基本运算
数值运算&矩阵运算
元素级运算(一维数组):加减/乘/平方/判断/三角函数等
a=np.arange(1,5,1)
b=np.array([0,1,2,3])
a-b #对应相减
>>>array([1, 1, 1, 1])
a*b #对应相乘
>>>array([ 0, 2, 6, 12])
a**2 #求平方
>>>array([ 1, 4, 9, 16])
np.sin(a)*5 #三角函数
>>>array([ 4.20735492, 4.54648713, 0.70560004, -3.78401248])
a>3 #判断值
>>>array([False, False, False, True])
np.exp(a) #指数
>>>array([ 2.71828183, 7.3890561 , 20.08553692, 54.59815003])
统计计算
#均值
a=np.random.randint(0,5,(2,3))
print(a.sum(),a.sum(0),a.sum(axis=0)) #分别对矩阵和列求和
print(a.mean(),a.min(1),a.std(1)) #分别对矩阵和行求均值、最小值及标准差
np.median(a) #求中位数
>>>13 [3 5 5] [3 5 5]
>>>2.1666666666666665 [1 2] [0. 0.94280904]
>>>1.5
矩阵运算(二维数组)
a=np.array([[1,2],[3,4]])
b=np.arange(6).reshape(2,-1) #生成2行矩阵
print(a,'\n',b)
a.dot(b) #矩阵的乘法
>>>
[[1 2]
[3 4]]
[[0 1 2]
[3 4 5]]
array([[ 6, 9, 12],
[12, 19, 26]])
1.5 索引/切片/遍历
数组的索引切片原理和List等类似:索引从0开始,-1代表最后一个索引;左闭右开原则
#一维数组
a=np.arange(0,10,1)**2
>>>[ 0 1 4 9 16 25 36 49 64 81]
#数组的索引切片原理和List等类似:索引从0开始,-1代表最后一个索引;左闭右开原则
print(a[2],a[-1]) #取某个值
>>>4 81
print(a[-3:-1]) #切片取值
>>>array([49, 64])
#遍历输出
for i in a:
print(i)
>>>
0
1
4
9
16
25
36
49
64
81
#二维数组
c=np.arange(0,20,1).reshape(4,-1)
print('第二行:',c[1],'\n二到四列:\n',c[:,1:4],'\n二到四行的第三列',c[1:4,2],
'\n第二行:',c[1,:])
>>>
第二行: [5 6 7 8 9]
二到四列:
[[ 1 2 3]
[ 6 7 8]
[11 12 13]
[16 17 18]]
二到四行的第三列 [ 7 12 17]
第二行: [5 6 7 8 9]
1.6 形状操作
a=10*np.random.random((3,4)) #随机产生大小在0-1之间的3行4列的数
>>>
>array([[1.61359796, 9.556233 , 8.80181351, 3.54740817],
[6.32344717, 5.30891265, 4.84778884, 8.27223197],
[3.85746314, 2.93382628, 1.62288255, 6.7528529 ]])
b=np.floor(a) #截取整数部分
>>>
>array([[1., 3., 9., 2.],
[2., 7., 4., 8.],
[2., 7., 5., 1.]])
b.ravel() #一维化操作(一行)
>>>
>array([1., 3., 9., 2., 2., 7., 4., 8., 2., 7., 5., 1.])
b.shape=(6,-1) #改变形状
>>>
>array([[1., 3.],
[9., 2.],
[2., 7.],
[4., 8.],
[2., 7.],
[5., 1.]])
b.transpose() #转置
>>>
>array([[1., 9., 2., 4., 2., 5.],
[3., 2., 7., 8., 7., 1.]])
1.7 删除
#一维数组中删除元素
a=np.arange(1,5,1)
print(a)
#>>>[1 2 3 4]
a=np.delete(a,0) #删除a中第一个元素
print(a)
#>>>[2 3 4]
#二维数组中删除元素
#注:在删除里axis=0
b=np.arange(0,10,1).reshape(2,-1)
print(b)
#>>>[[0 1 2 3 4]
# [5 6 7 8 9]]
b=np.delete(b,1,axis=0) #删除b中第2行元素
print(b)
#>>>[[0 1 2 3 4]]
b=np.delete(b,1,2) #删除b中值为2的元素
print(b)
#>>>[[0 1 3 4]]
1.8 条件判断 np.where() 用法
np.where( condition , arr1 , arr2 ):condition为真时,取arr1,反之取arr2。
#条件逻辑运算
arr=np.random.randn(4,4)
arr
>>>
>array([[ 0.08045628, 0.07516321, -0.45422927, -0.06719862],
[-0.59950239, 0.46640377, 0.77212609, 0.62769923],
[ 0.28720133, 0.2913662 , 0.03102816, -1.12311734],
[ 0.23945325, 0.5318206 , 0.44572582, 0.0373522 ]])
arr_new=np.where(arr>0,1,-1)
arr_new
>>>
>array([[ 1, 1, -1, -1],
[-1, 1, 1, 1],
[ 1, 1, 1, -1],
[ 1, 1, 1, 1]])
# 多重条件判断
arr=np.random.randint(-100,200,size=(4,5))
arr
>>>
>array([[ 1, -70, 79, 189, -87],
[-32, -25, 13, 15, -55],
[ -3, 170, -90, 156, 110],
[-60, -13, 30, 122, 9]])
arr_new=np.where(arr>=100,1,np.where(arr>=0,0,-1))
arr_new
>>>
>array([[ 0, -1, 0, 1, -1],
[-1, -1, 0, 0, -1],
[-1, 1, -1, 1, 1],
[-1, -1, 0, 1, 0]])
如果对于本文中代码或数据有任何疑问,欢迎评论或私信交流