numpy基础学习笔记

numpy基础

numpy默认要求矩阵里面都是相同类型:

array = ([1,2,3,4,'5'])
print(array)
array(['1','2','3','4','5'],dtype = '<u11') < code></u11')>

常用:

array.itemsize() # &#x67E5;&#x770B;&#x6BCF;&#x4E2A;&#x5143;&#x7D20;&#x5360;&#x4E86;&#x591A;&#x5C11;&#x4E2A;&#x5B57;&#x8282;
array.size() # &#x67E5;&#x770B;&#x91CC;&#x9762;&#x6709;&#x591A;&#x5C11;&#x4E2A;&#x5143;&#x7D20;
array.ndim() # &#x67E5;&#x770B;&#x6709;&#x591A;&#x5C11;&#x4E2A;&#x7EF4;&#x5EA6;
array.fill(n) # &#x7528;n&#x586B;&#x5145;&#x77E9;&#x9635;

array = ([1,2,3,4,5])
array2 = array
array2[1] = 10
print(array2) # ([1,10,3,4,5])
print(array) # ([1,10,3,4,5])

array2 = array并不是创建一个新的地址存储array2,只是让array2指向和array相同的地址,因此修改 array2的值,也会修改 array的值,此时的解决办法为: array2 = array.copy()

np.random.rand(n)会随机返回n个0-1之间的值,可以根据随机数组random_array返回一个bool类型的矩阵

random_array = np.random.rand(5)
array([0.56372953,0.13857392,0.48362758,0.84739275,0.937582716])
mask = random_array > 0.5
array([True,False,False,True,True],dtype = bool)

使用 np.where()来找到想要的值的索引,可以利用该索引来提取想要的值

np.where(array > 3) # array([3,4],dtype = int64)
array[np.where(array >30)] # array([4,5])

常用:

array = ([1,2,3,4,5],dtype = np.float32)
print(array.nbytes()) # 20
&#x8FD4;&#x56DE;&#x7684;&#x603B;&#x5171;&#x5360;&#x591A;&#x5C11;&#x5B57;&#x8282; &#x4E00;&#x4E2A;float32&#x5360;4&#x4E2A;&#x5B57;&#x8282;&#xFF0C;5&#x4E2A;&#x5143;&#x7D20;&#x4E00;&#x5171;&#x5360;20&#x4E2A;&#x5B57;&#x8282;

array = ([1,2,3.5,'str'])
print(array) # array(['1','2','3.5','str']) &#x4F1A;&#x5168;&#x90E8;&#x8FD4;&#x56DE;&#x5B57;&#x7B26;&#x4E32;&#x7C7B;&#x578B;
array = ([1,2,3.5,'str'],dtype = object)
print(array) # array([1,2,3.5,'str']) # object&#x4F1A;&#x4FDD;&#x6301;&#x5143;&#x7D20;&#x539F;&#x6709;&#x7C7B;&#x578B;

重新定义矩阵类型:

array = ([1,2,3,4,5])
array2 = np.asarray(array,dtype = np.float32)
print(array2) # array([1.,2.,3.,4.,5.],dtype = float32)
print(array) # array([1,2,3,4,5],dtype = float32)
&#x91CD;&#x65B0;&#x5B9A;&#x4E49;array&#x7C7B;&#x578B;&#xFF0C;&#x5E76;&#x5B58;&#x5230;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x5185;&#x5B58;array2&#x4E2D;&#xFF0C;&#x5373;&#x4E0D;&#x4F1A;&#x4FEE;&#x6539;&#x539F;&#x6709;array&#x7684;&#x7C7B;&#x578B;
astype()&#x4E5F;&#x53EF;&#x4EE5;&#x505A;&#x5230;
array.astype(dtype = np.float32)
array.clip(2,4) # ([2,2,3,4,4,4])
#clip(n,m)&#x51FD;&#x6570;&#xFF0C;&#x5C06;&#x5C0F;&#x4E8E;n&#x7684;&#x503C;&#x5168;&#x90E8;&#x6539;&#x4E3A;n&#xFF0C;&#x5C06;&#x5927;&#x4E8E;m&#x7684;&#x503C;&#x5168;&#x90E8;&#x6539;&#x4E3A;m
array = ([1.2,3.4,5.67])
array.round() # [1,3,6] &#x56DB;&#x820D;&#x4E94;&#x5165;
array.round(decimal = 1) #[1.2,3.4,5.7] &#x53C2;&#x6570;decimal&#x51B3;&#x5B9A;&#x4FDD;&#x7559;&#x51E0;&#x4F4D;&#x5C0F;&#x6570;

array = ([[1,2,3],[4,5,6]])
np.sum(array) # 21
&#x6216;&#x8005;&#x53EF;&#x4EE5;&#x5199;array.sum()
np.sum(array,axis = 0) # ([5,7,9])
array(sum,axis = 0)
np.sum(array,axis = 1) # ([6,15])

可以利用 axis 指定轴进行计算,对于多维的矩阵,想指定最后一个轴时,可用 axis = -1,除了加法运算,还有一下运算,均可以使用轴来进行运算:

  • 乘法 prod()
  • 最小值 min()
  • 最大值 max()
  • 找到最小值的索引 argmin()
  • 找到最大值的索引 argmax()
  • 均值 mean()
  • 标准差 std()
  • 方差 var()
array = ([[1.5,1.3,7.5],[5.6,7.8,1.2]])
np.sort(array) # ([[1.3,1.5,7.5],[5.6,[7.8],[7.5]])
np.sort(array,axis = 0) # ([[1.5,1.3,1.2],[5.6,7.8,7.5]]) &#x6309;&#x8F74;&#x6392;&#x5E8F;

排序索引

np.argsort(array) # ([[1,0,2],[2,0,1]])

array = np.linspace(0,10,10)
 # ([0.,1.11111111,2.22222222,3.33333333,4.44444444,5.55555556,6.66666667,7.77777778,8.88888889,10.])
values = np.array([2.5,6.5,9.5])
np.searchsorted(array,values)
[3,6,9] &#x6309;&#x5927;&#x5C0F;&#x987A;&#x5E8F;&#x8FD4;&#x56DE;&#x63D2;&#x5165;&#x7684;&#x4F4D;&#x7F6E;

多条件排序

array = np.array([[1,0,6],[1.7.6],[2.3.1],[2.4.0]])
index = np.lexsort([-1*array[:,0],array[:,2]])
&#x5728;&#x7B2C;&#x4E09;&#x5217;&#x964D;&#x5E8F;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x7B2C;&#x4E00;&#x5217;&#x5347;&#x5E8F; &#x8FD4;&#x56DE;[0,1,3,2]
array[index] = index
([[2,4,0],[1,7,0],[2,3,1],[1,0,6]])
array = np.arange(10) # ([0,1,2,3,4,5,6,7,8,9])
print(array,shape) # (10,)
array.shape = 2,5 # ([[0,1,2,3,4],[5,6,7,8,9]])
array.reshape(1,10) #  ([[0,1,2,3,4,5,6,7,8,9]])

新增一个维度 newaxis

array = np.arange(10) # ([0,1,2,3,4,5,6,7,8,9])
print(array.shape) # (10,)
array = array[:,np.newaxis] # ([[0],[1],[2],[3],[4],[5],[6],[7],[8],[9]])
print(array.shape) # (10,1)
array = array[:,np.newaxis,np.newaxis]
print(array.shape) # (10,1,1,1)

压缩 squeeze()

array = array.squeeze() #&#x53BB;&#x6389;&#x7A7A;&#x8F74;
print(array.shape) # (10,)

转置 transpose()T

array.shape = 2,5
array.transpose() #([[0,5],[1,6],[2,7],[3,8],[4,9]])
&#x6216;&#x8005;array.T &#xFF0C;&#x4F46;&#x6B64;&#x65F6;array&#x7684;&#x503C;&#x4E0D;&#x4F1A;&#x6539;&#x53D8;&#xFF0C;&#x6240;&#x4EE5;&#x8981;&#x4F7F;&#x7528;&#x8F6C;&#x7F6E;&#xFF0C;&#x5FC5;&#x987B;&#x91CD;&#x65B0;&#x8D4B;&#x503C;

数组的连接 concatenate()

a = np.array([[12,34,23],[32,43,45]])
b = np.array([[35,37,68],[56,58,34]])
c = np.concatenate((a,b))
&#x6CE8;&#x610F;&#x4E24;&#x4E2A;&#x62EC;&#x53F7;&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A;&#x62EC;&#x53F7;&#x4F20;&#x53C2;&#x6570;&#xFF0C;&#x7B2C;&#x4E8C;&#x4E2A;&#x62EC;&#x53F7;&#x4EE3;&#x8868;&#x5143;&#x7EC4;
([[12,34,23],[32,43,45],[35,37,68],[56,58,34]])
c = np.concatenate((a,b),axis = 1)
#([[12,34,23,35,37,68],[32,43,45,56,58,34]])

np.vstack((a,b))# ([[12,34,23],[32,43,45],[35,37,68],[56,58,34]])
np.hstack((a,b))#([[12,34,23,35,37,68],[32,43,45,56,58,34]])

拉平 flatten()ravel()

a.flatten() #([12,34,23,32,43,45])
a.ravel() #([12,34,23,32,43,45])

arange() 左闭右开

np.arange(10)
np.arange(2,20,2)

linspace()左开左闭

np.linspace(0,10,50) # &#x5728;0-10&#x4E2D;&#x968F;&#x673A;50&#x4E2A;&#x6570;

logspace() 默认以10为底

np.logspace(0,1,5)

生成x,y的网格 meshgrid()

x = linspace(-10,10,5) # ([-10,-5,0,5,10])
y = linspace(-10,10,5) # ([-10,-5,0,5,10])
x, y = meshgrid(x,y)
print(x) #([[-10,-5,0,5,10],[-10,-5,0,5,10],[-10,-5,0,5,10],[-10,-5,0,5,10],[-10,-5,0,5,10]])
print(y) #([[-10,-5,0,5,10],[-10,-5,0,5,10],[-10,-5,0,5,10],[-10,-5,0,5,10],[-10,-5,0,5,10]])

构造行向量、列向量

np.r_[0:10:1] # &#x884C;&#x5411;&#x91CF;([0,1,2,3,4,5,6,7,8,9])
np.c_[0:10:1] # &#x5217;&#x5411;&#x91CF;([[0],[1],[2],[3],[4],[5],[6],[7],[8],[9]])

更常用的 zeros()ones()empty()

np.zeros(3) # ([0.,0.,0.])
np.zeros((3,3)) # ([[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]])
np.ones((3,3)) # ([[1.,1.,1.],[1.,1.,1.],[1.,1.,1.]])
a = np.empty(5) # &#x968F;&#x673A;
a.fill(1) #([1.,1.,1.,1.,1.])

a = np.array([1,2,3,4])
b = np.zeros_like(a) # ([0,0,0,0]) &#x53EA;&#x590D;&#x5236;shape

np.identity(3) #&#x6784;&#x9020;&#x5355;&#x4F4D;&#x51FD;&#x6570; ([1,0,0],[0,1,0],[0,0,1])

运算必须保证维度相同

x = np.array([5,5])
y = np.array([2,2])
np.multiply(x,y) #([10,10]) &#x5BF9;&#x5E94;&#x4F4D;&#x7F6E;&#x8FDB;&#x884C;&#x76F8;&#x4E58;
np.dot(x,y) # 20 = 2*5+2*5 &#x5185;&#x79EF;

x.shape = 2,1
y.shape = 1,2
np.dot(x,y) #([[10,10],[10,10]])
np.dot(y,x) #([[20]])

逻辑运算

x = np,array([1,1,1,4])
y = np,array([1,1,1])
x == y # &#x7EF4;&#x5EA6;&#x4E0D;&#x4E00;&#x6837;&#x62A5;&#x9519;

y = np,array([1,1,1,2])
x == y #([True,True,Ture,False])
np.logical_and(x,y) #([True,True,Ture,True]) &#x8FD4;&#x56DE;&#x903B;&#x8F91;and
np.logical_or(x,y) #([True,True,Ture,True]) &#x8FD4;&#x56DE;&#x903B;&#x8F91;or
np.logical_not(x,y) #([0,0,0,0]) &#x8FD4;&#x56DE;&#x903B;&#x8F91;not
np.random.rand(3,2) #&#x6784;&#x9020;&#x4ECE;0-1&#x7684;shape&#x4E3A;3,2&#x7684;&#x77E9;&#x9635;
np.random.randint(10,size=(5,4)) #&#x6784;&#x9020;5&#xFF0C;4&#x7684;0-10&#x7684;&#x968F;&#x673A;&#x77E9;&#x9635; &#x5DE6;&#x95ED;&#x53F3;&#x5F00;
np.random.random_sample()
np.random.randint(0,10,3) # &#x5728;0-10&#x4E2D;&#x968F;&#x673A;&#x9009;&#x62E9;3&#x4E2A;&#x6570;
mu, sigma = 0,0.1
np.random.normal(mu,sigma,10) # &#x9AD8;&#x65AF;&#x5206;&#x5E03;&#x968F;&#x673A;10&#x4E2A;&#x6570;
np.set_printoptions(precision = 3) # &#x8BBE;&#x7F6E;&#x6D6E;&#x70B9;&#x7684;&#x7CBE;&#x5EA6;&#xFF0C;&#x5373;&#x8F93;&#x51FA;3&#x4E3A;&#x5C0F;&#x6570;

洗牌 shuffle()

array = np.arange(10)
np.random.shuffle(array) # &#x6253;&#x4E71;array&#x7684;&#x987A;&#x5E8F;

随机种子 seed()

np.random.seed(0)
mu, sigma = 0,0.1
np.random.normal(mu,sigma,10)
&#x6307;&#x5B9A;&#x968F;&#x673A;&#x7684;&#x79CD;&#x5B50;&#x540E;&#xFF0C;&#x65E0;&#x8BBA;&#x6267;&#x884C;&#x591A;&#x5C11;&#x6B21;np.random.normal(mu,sigma,10) &#x503C;&#x90FD;&#x4E0D;&#x4F1A;&#x53D8;&#xFF0C;&#x53EA;&#x6709;&#x5F53;&#x4FEE;&#x6539;seed&#x91CC;&#x9762;&#x7684;&#x53C2;&#x6570;&#x65F6;&#xFF0C;&#x624D;&#x4F1A;&#x6539;&#x53D8;
#&#x9996;&#x5148;&#x5199;&#x4E2A;&#x6587;&#x4EF6;
%%writefile tang.txt
1 2 3 4 5 6
2 3 5 8 7 9

data = []
with open('tang.txt') as f:
    for line in f.readlines():
        fileds = line.split()
        cur_data = [float(x) for x in fileds]
        data.append(cur_data)
data = np.array(data) #([[1.,2.,3.,4.,5.,6.],[2.,3.,5.,8.,7.,9.]])

data = np.loadtxt('tang.txt') #([[1.,2.,3.,4.,5.,6.],[2.,3.,5.,8.,7.,9.]]) &#x82E5;&#x6570;&#x636E;&#x6BD4;&#x8F83;&#x89C4;&#x6574;&#xFF0C;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4F7F;&#x7528;loadtxt

%%writefile tang2.txt
1,2,3,4,5,6
2,3,5,8,7,9
data = np.loadtxt('tang2.txt') #&#x62A5;&#x9519;&#xFF0C;&#x65E0;&#x6CD5;&#x8F6C;&#x4E3A;&#x6D6E;&#x70B9;&#x578B;&#xFF0C;&#x9700;&#x8981;&#x6307;&#x5B9A;&#x5206;&#x9694;&#x7B26;
data = np.loadtxt('tang2.txt',delimiter = ',') #&#x9ED8;&#x8BA4;&#x4E3A;&#x7A7A;&#x683C;

%%writefile tang2.txt
    x,y,z,w,d,s
    1,2,3,4,5,6
    2,3,5,8,7,9
data = np.loadtxt('tang2.txt',delimiter = ',',skiprows = 1) #skiprows&#x53BB;&#x6389;&#x7B2C;&#x4E00;&#x884C;

skiprows:去掉几行
delimiter = ‘,’ :以,为分隔符
usecols = (0,1,4) :指定使用哪几列

array = np.array([[1,2,3],[4,5,6]])
np.savetxt 'tang4.txt',array.fmt = '%d',delimiter = ','#fmt&#x4E3A;&#x6307;&#x5B9A;&#x6570;&#x636E;&#x7C7B;&#x578B;fmt = '%.2f'

读写array结构

array = np.array([[1,2,3],[4,5,6]])
np.save('tang5.npy',array)

tang = np.load('tang5.npy')
print(tang) # ([[1,2,3],[4,5,6]])

#&#x4FDD;&#x5B58;&#x591A;&#x4E2A;array,&#x4F1A;&#x4FDD;&#x5B58;&#x6210;&#x4E00;&#x4E2A;&#x538B;&#x7F29;&#x6587;&#x4EF6;npz,&#x91CC;&#x9762;&#x6709;&#x591A;&#x4E2A;npy
array1 = np.arange(10)
np.savez('tang.npz',a = array,b = array1)
data = np.load('tang.npz')
data.keys() # ['b','a']
data['a'] #([[1,2,3],[4,5,6]])

练习题

1、打印当前numpy版本

print(np.__version__)

2、打印3,3零矩阵,并输出其占用的内存

arr2 = np.zeros((3,3))
print(arr2,arr2.nbytes)
print('%d bytes'% (arr2.size * arr2.itemsize))

3、np的帮助文档

print(help(np.info(np.add)))

4、返回数组10-49,且为降序

arr4 = np.arange(10,50,1)
arr4 = arr4[::-1]
print(arr4)

5、找到一个数组中不为0的索引

arr5 = np.nonzero([1,34,654,8,0,467,0,579,0,50,0,0])
print(arr5)

6、3*3矩阵 打印最大值、最小值

arr6 = np.array([[235,3674,345,457],[34,57,3,647]])
print(arr6)
print(arr6.max(),arr6.min())

7、5,5矩阵,外圈加一圈0,pad()函数

arr7 = np.ones((5,5))
arr7 = np.pad(arr7,pad_width = 1,mode = 'constant',constant_values = 0)
print(arr7)

8、shape=6,7,8的矩阵,返回第100个元素的索引

print(np.unravel_index(100,(6,7,8)))

9、5,5矩阵归一化

arr8 = np.random.random((5,5))
arr8 = (arr8-arr8.min())/(arr8.max()-arr8.min()) #&#x5F52;&#x4E00;&#x5316;
print(arr8)

10、找到两个数组中相同的值

arr9 = np.random.randint(0,10,10)
arr10 = np.random.randint(0,10,10)
print(arr9)
print(arr10)
print(np.intersect1d(arr10,arr9))

11、得到昨天、今天、明天

yesterday = np.datetime64('today','D') - np.timedelta64(1,'D')
today = np.datetime64('today','D')
tommorow = np.datetime64('today','D') + np.timedelta64(1,'D')
print(yesterday,today,tommorow)

12、得到一个月所有的天

arr11 = np.arange('2022-03','2022-04',dtype = 'datetime64[D]')
print(arr11)

13、得到一个数的整数部分

arr12 = np.random.uniform(0,10,10)# 0-10&#x9009;10&#x4E2A;&#x6570;
print(arr12)
arr12 = np.floor(arr12)# round()&#x56DB;&#x820D;&#x4E94;&#x5165;&#xFF0C;floor()&#x5411;&#x4E0B;&#x53D6;&#x6574;
print(arr12)

14、构造一个不能背改变的数组

arr13 = np.zeros(5)
arr13.flags.writeable = False

15、打印一个很大的数据的部分值,全部值

np.set_printoptions(threshold=np.nan)# &#x6253;&#x5370;&#x5168;&#x90E8;
arr14 = np.zeros((15,15))
print(arr14)
np.set_printoptions(threshold=5)# &#x53EA;&#x6253;&#x5370;5&#x884C;
arr14 = np.zeros((15,15))
print(arr14)

16、在数组中,找到最接近数的索引

arr15 = np.arange(100)
v = np.random.uniform(0,100)
print(v)
index = (np.abs(arr15-v)).argmin()
print(index)
'''
93.2285873444004
93
'''

17、float32和int32的转换

arr16 = np.arange(10,dtype = np.int32)
arr16 = arr16.astype(np.float32)
print(arr16.dtype)

18、打印数组元素位置坐标与数值

arr17 = np.arange(9).reshape(3,3)
for index,value in np.ndenumerate(arr17):
    print(index,value)
'''
(0, 0) 0
(0, 1) 1
(0, 2) 2
(1, 0) 3
(1, 1) 4
(1, 2) 5
(2, 0) 6
(2, 1) 7
(2, 2) 8
'''

19、按某一列排序

arr18 = np.random.randint(0,10,(3,3))
print(arr18)
print(arr18[arr18[:,1].argsort()])
'''
[[6 7 7]
 [6 8 5]
 [6 4 0]]
[[6 4 0]
 [6 7 7]
 [6 8 5]]
'''

20、统计有多少个重复值

arr19 = np.random.randint(1,10,10)
print(arr19)
print(np.bincount(arr19)) # &#x7EDF;&#x8BA1;arr19&#x91CC;&#x5206;&#x522B;&#x6709;&#x591A;&#x5C11;&#x4E2A;&#xFF0C;&#x4ECE;0-&#x6700;&#x5927;&#x503C;
[9 8 3 3 9 4 3 7 7 3]
[0 0 0 4 1 0 0 2 1 2]

21、四维矩阵,以最后两维求和

arr20 = np.random.randint(0,20,(4,4,4,4))
print(arr20.sum(axis = (-2,-1)))

22、矩阵交换两行顺序

a   rr21 = np.arange(25).reshape(5,5)
arr21[[0,1]] = arr21[[1,0]]

23、数组中最常出现的数

arr22 = np.random.randint(0,10,20)
print(np.bincount(arr22).argmax())

24、快速查找TOP K

arr23 = np.arange(10000)
np.random.shuffle(arr23)
n = 5
print(arr23[np.argpartition(-arr23,n)[:n]])
[9999 9998 9996 9997 9995]

25、去掉一个数组中,所有元素都相同的数据

arr24 = np.random.randint(0,3,(10,3))
print(arr24)
e = np.all(arr24[:,1:] == arr24[:,:-1],axis = 1)# &#x8FD8;&#x6709;&#x4E00;&#x4E2A;any
all&#x9650;&#x5236;&#x6240;&#x6709;&#x5143;&#x7D20;&#x76F8;&#x540C;&#xFF0C;any&#x53EA;&#x8981;&#x6709;&#x5143;&#x7D20;&#x76F8;&#x540C;
print(e)

Original: https://blog.csdn.net/qq_45003520/article/details/123528039
Author: indigo女孩
Title: numpy基础学习笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/759566/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球