当前位置: 首页 > 后端技术 > Python

18个实用Numpy代码片段总结

时间:2023-03-25 20:14:50 Python

Numpy长期以来一直是Python开发人员进行数组操作的普遍选择,它建立在C之上,这使其成为执行数组操作的快速可靠的选择,并且它已成为必不可少的库用于机器学习和数据科学。在这篇文章中,我整理了一些日常开发中经常用到的NumPy代码片段。1.创建一个数组importnumpyasnpnew_array=np.array([1,2,3])print(new_array)#Output[123]2。获取Numpy数组的形状、维度和大小#shapeprint(new_array.shape)#dimensionsprint(new_array.ndim)#sizeprint(new_array.size)#Output(3,)133、查看Numpy数组array中元素的类型=np.arange(0,10,1)print(array.dtype)#Outputint644,获取数组中每个元素的字节大小array=np.array([1,2])print(array.itemsize)#Output85,创建时指定的数组类型array=np.array([[1,2],[3,4]],dtype=complex)array#Outputarray([[1.+0.j,2.+0.j],[3.+0.j,4.+0.j]])6.使用占位符创建数组#Allzerosarray=np.zeros((3,4))print(array)print("---")#Allonesarray=np.ones((1,2))print(array)print("---")#形状为(2,3)的空数组,随机生成数据array=np.空((2,3))打印(数组)打印(“---”)#输出[[0。0.0.0.][0.0.0.0.][0.0.0.0.]]---[[1.1.]]---[[4.67280967e-3100.00000000e+0000.00000000e+000][0.00000000e+0000.00000000e+0000.00000000e+000]]---7.创建序列#使用np.arange创建一个从0到42的序列,步长1array=np.arange(0,42,1)print(array)print("---")#使用np.linspace在0到100之间插入42元素array=np.linspace(0,100,42)print(array)print("---")#Output[01234567891011121314151617181920212223242526272829303132333435363738394041]---[0.2.439024394.878048787.317073179.7560975612.1951219514.6341463417.0731707319.5121951221.9512195124.390243926.8292682929.2682926831.7073170734.1463414636.5853658539.0243902441.4634146343.9024390246.3414634148.780487851.219512253.6585365956.0975609858.5365853760.9756097663.4146341565.8536585468.2926829370.7317073273.1707317175.609756178.0487804980.4878048882.9268292785.3658536687.8048780590.2439024492.6829268395.1219512297.56097561100.]---8、Numpy中的数学函数importnumpyasnpimportmatplotlib.pyplotasplt#sinefunctionx=np.linspace(0,2*np.pi,100)f=np.sin(x)plt.figure(figsize=(15,7))plt.subplot(1,3,1)plt.plot(f,color="green")plt.title("np.sin(x)")#co正弦函数f=np.cos(x)plt.subplot(1,3,2)plt.plot(f,color="blue")plt.title("np.cos(x)")#tangentfunctionf=np.tan(x)plt.subplot(1,3,3)plt.plot(f,color="red")plt.title("np.tan(x)")plt.show()9.传入每个Execute坐标函数创建数组some_function=lambdax:np.cos(x)+1array=np.fromfunction(some_function,(100,))plt.figure(figsize=(15,7))plt.plot(array,color="green")plt.title("np.cos(x)+1")plt.show()10.遍历Numpy数组a=np.arange(0,23,1)foriina中的所有元素.flat:print(i)#输出012...2211,得到浮点数的下限np.floor(10.5)10.012,用.ravel()将数组展平array=np.full(shape=(5,5),fill_value=10)print(array)print("---")print("展平数组:")print(array.ravel())#输出[[1010101010][1010101010][1010101010][1010101010][1010101010]]---扁平数组:[10101010101010101010101010101010101010101010101010]13.获取一个数组array=np.random.random((2,5))print(array)print(array.T)[[0.187357040.228005820.025521770.935523460.20720663][0.743032840.18974810.913896020.230995010.07565492]][[0.187357040.74303284][0.228005820.1897481]shape()和.resize()进行重塑a=np.random.randint(100,size=(3,4))print(a)a_reshaped=np.reshape(a,(1,12))print(a_reshaped)#使用.resize()方法a.resize((1,12))#输出[[29183924][5345498][90756161]][[29183924534549890756161]]15.沿不同轴堆叠数组a=np.random.random((2,2))print(a)b=np.random.random((2,2))print(b)#沿垂直轴堆叠(获得更多行)print(np.vstack((a,b)))print(np.vstack((a,b)).shape)#沿水平轴堆叠(获得更多列)打印(np.hstack((a,b)))print(np.hstack((a,b)).shape)#column_stack列叠加print(np.column_stack((a,b)))#Output[[0.670284920.86322792][0.389062660.36967583]][[0.514195530.219378032][495][[0.670284920.86322792][0.389062660.36967583][0.514195530.21937852][0.503754530.31634597]](4,2)[[0.670284920.863227920.514195530.21937852][0.389062660.369675830.503754530.31634597]](2,4)[[[0.670284920.863227920.514195530.21937852][0.389062660.389062660.369675830.369675830.503754530.503754530.37530.31634597]通过指定应该在其后发生拆分的列a=np.arange(0,5,1)print("Horizo??ntalsplit")print(np.hsplit(a,5))print("---")#split将数组沿垂直轴分成5小数组a=np.random.random((5,5))print("Verticalsplit")print(np.vsplit(a,5))Horizo??ntalsplit[array([0]),array([1]),array([2]),array([3]),array([4])]---垂直分割[array([[0.69059321,0.55703093,0.20019592,0.19697317,0.37278251]]),array([[0.24597633,0.87216661,0.634432,0.35326185,0.03130537]]),array([[0.18063077,0.45045441,0.06882852,0.91273837,0.07332161]]),array([[0.61738939,0.11291748,0.73152623,0.49177006,0.95750985]]),array([[0.90212777,0.53825846,0.86733505,0.76165564,0.17337721]])]17.T数组的浅拷贝。view()方法创建了一个和原数组对象一样的对象,它创建了数组的浅拷贝,浅拷贝只拷贝了指向对象的指针,没有拷贝对象数据,新老对象仍然共享相同的内存。所以如果其中一个对象改变了内存的值,就??会影响到另一个对象,也就是说如果一个对象的值改变了,其他的也会改变(使用相同的内存)。a=np.array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]])array_object=np.arange(0,10,1)shallow_copy_object=array_object.view()#shallowcopyprint("Array")print(array_object)print(f"Id={id(array_object)}")print("---")print("浅拷贝")print(shallow_copy_object)print(f"Id={id(shallow_copy_object)}")print("---")shallow_copy_object[0]=200print("赋值后:shallow_copy_object[0]=200")print("数组")print(array_object)print("浅拷贝")print(shallow_copy_object)#OutputArray[0123456789]Id=139980496768528---浅拷贝[0123456789]Id=139980496768720---赋值后:shallow_copy_object[0]=200Array[200123456789]Shallowcopy[200123456789]18.数组深度copy方法制作对象及其数据的完整副本。一份是完全复制,内部元素的地址不同,值的变化不会互相影响。array_object=np.arange(0,23,1)deep_copy_object=array_object.copy()print(deep_copy_objectisarray_object)print("Array")print(array_object)print(f"数组id={id(array_object)}")print("---")print("DeepCopy")print(deep_copy_object)print(f"Deepcopyid={id(deep_copy_object)}")print("---")deep_copy_object[0]=234print("分配后:deep_copy_object[0]=234")print("Array")print(array_object)print("Deepcopy")print(deep_copy_object)FalseArray[012345678910111213141516171819202122]Arrayid=139980498767472---DeepCopy[012345678910111213141516171819202122]Deepcopyid=1390-3898296-赋值后:deep_copy_object[0]=234Array[012345678910111213141516171819202122]Deepcopy[23412345678910111213141516171819202122]作者:LucasSoares