机器学习技术(二)——Python科学运算模块(Numpy、Pandas)

news2024/12/23 16:34:57

机器学习技术(二)——Python科学运算模块(Numpy、Pandas)

文章目录

  • 机器学习技术(二)——Python科学运算模块(Numpy、Pandas)
    • 一、Numpy
      • 1、介绍、安装与导入
      • 2、Numpy常用操作
    • 二、Pandas
        • 1.导入相关依赖库
        • 2.创建Series
        • 3.创建DataFrame
        • 4.查看DataFrame中的数据
        • 5.DataFrame数据的操作
        • 6.Pandas中缺失数据的操作
    • 三、总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2AB3t59R-1688378297891)(D:\文件\CSDN\华为实训\机器学习基础\机器学习预备知识\科学计算.png)]

一、Numpy

1、介绍、安装与导入

使用NumPy库中的函数实现对数组的基本操作。对一些数据处理方法有所了解,在以后对机器学习实验中与处理数据以及底层代码实现打下基础。

首先使用“pip install 包名”的方式安装实验所需要的库:

pip install numpy

也可以下载相关包的源码文件进行安装。如果实验环境中已存在所需要的库

(使用pip list可查看已安装的库)则跳过此步骤

(Python中一些库在安装时需要事先安装一些依赖环境,如果使用pip命令安装失败,可以尝试安装依赖的库后再进行安装,或者使用源码安装)

2、Numpy常用操作

导入numpy,使用NumPy库中的方法生成数组,并查看数组的属性。

import numpy as np # 导入库时可以使用as来为为库起别名
  1. np.zeros(shape, dtype=float, order='C')

创建一个形状为shape的全零数组。dtype为数据类型。order=C代表与c语言类似,行优先;order=F代表列优先

n = np.zeros([2,2])	# 创建一个2*2的全0数组
print(n)
''' 输出[[0. 0.]
 		[0. 0.]] '''
  1. np.ones(shape, dtype=None, order='C')

创建一个全1数组,和np.zeros()类

m = np.ones([2,2]) # 创建一个2*2的全1数组
print(m)
'''输出[[1. 1.]
		[1. 1.]]'''
  1. np.eye(N, M=None, k=0, dtype=float, order='C')

生成一个对角矩阵,N为行数;M为列数,默认和N一样;k为对角线的索引,0代表主对角线。

e = np.eye(2) # 创建一个2X2的对角矩阵
print(e)
'''输出[[1. 0.]
 [0. 1.]]'''s
  1. numpy.empty(shape, dtype=float, order='C')

生成一个未初始化的数组。

print(np.empty([3,3]))
''' 输出[[0.00000000e+000 0.00000000e+000 0.00000000e+000]
 [0.00000000e+000 0.00000000e+000 1.54148482e-321]
 [8.34448956e-308 1.42404727e-306 1.44629801e-307]] '''
  1. numpy.full(shape, fill_value, dtype=None, order='C')

二、Pandas

在Python中对数据进行处理时,经常会使用到Pandas这个库,它提供了诸多的数据处理方法和时间序列的操作方法,是当下最重要的Python 科学运算模块之一,也是提供高性能易用数据类型和分析工具。

1.导入相关依赖库

import pandas as pd
import numpy as np

2.创建Series

Series是Pandas中数据结构之一,它是一种类似于一维数组的对象,由一组数据以及一组与之相关的数据标签(即索引)组成。

  1. pandas生成Series

pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)生成一个Series数据。data为数据可以是数组和字典等;index为索引值,要求与数据长度相同,dtype为数据类型。

s = pd.Series([1,3,5,np.nan,6,8])			# nan  缺失值
print(s)				

输出:

0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64
  1. 通过ndarray创建一个Series
x data = np.array(['a','b','c','d'])s = pd.Series(data)print(s) 

输出:

0    a
1    b
2    c
3    d
dtype: object
  1. 通过字典创建一个Series

字典(dict)可以作为输入传递,如果没有指定索引,则按排序顺序取得字典键以构造索引。 如果传递了索引,索引中与标签对应的数据中的值将被取出。

data1 = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data1)
print(s) 

输出:

a    0.0
b    1.0
c    2.0
dtype: float64

3.创建DataFrame

DataFrame 是Pandas中最常用的数据结构,类似于数据库中的表,不过DataFrame不仅仅限制于2维,可以创建多维数据表。DataFrame既有行索引,也有列索引,可以看做是Series组成的字典,每个Series看做DataFrame的一个列。

  1. pandas.date_range(start = None,end = None,periods = None,freq = "D",tz = None,normalize = False,name = None,closed = None,**kwargs )

生成一个时间序列的索引DatetimeIndex。start为日期起点,end为日期终点,periods为个数,freq表示间隔(D表示以日为间隔),tz表示时区。

  1. pandas.DataFrame(data=None, index=None, columns=None,dtype=None,copy=False)

生成一个DataFraem数据。data是数据,index是索引,columns是列名。

dates = pd.date_range('20230703', periods=7)# 生成作为行索引的时间序列
print(dates)
print("--"*16)
df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=list('ABCD'))
print(df) 

结果:

DatetimeIndex(['2023-07-03', '2023-07-04', '2023-07-05', '2023-07-06',
               '2023-07-07', '2023-07-08', '2023-07-09'],
              dtype='datetime64[ns]', freq='D')
--------------------------------
                   A         B         C         D
2023-07-03  0.363595  0.296730 -1.701725 -0.323202
2023-07-04  0.337387  1.545662 -0.598071  0.399948
2023-07-05  0.561122 -0.244265  1.874373 -0.500115
2023-07-06 -0.045536 -0.440416  0.679049 -0.343199
2023-07-07 -1.767418  0.141762 -3.015787  1.072641
2023-07-08 -1.085728  0.034458 -0.180272 -0.870009
2023-07-09  0.993971  0.589281 -1.142692  1.395541
  1. 使用字典形式创建DataFrame

输入:

df1 = pd.DataFrame({ 'A' : 1.,
                     'B' : pd.Timestamp('20190610'), # Timestamp 方法生成时间戳
                     'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                     'D' : np.array([3] * 4,dtype='int32'),
                    # Categoricals 是 pandas 的一种数据类型,对应着被统计的变量,
                    # categorical 类型的数据可以具有特定的顺序,这个顺序是创建时手工设定的,是静态的
                     'E' : pd.Categorical(["test","train","test","train"]),
                     'F' : 'foo' })
print(df1)

输出:

     A          B    C  D      E    F
0  1.0 2023-07-03  1.0  3   test  foo
1  1.0 2023-07-03  1.0  3  train  foo
2  1.0 2023-07-03  1.0  3   test  foo
3  1.0 2023-07-03  1.0  3  train  foo

4.查看DataFrame中的数据

  1. 查看顶部和底部的数据

接收一个用户输入的分数,然后判断用户所输入的分数属于什么级别。使用Python中的if语句可以完成此功能。

输入:

data2 = np.arange(30).reshape(6,5)		# 生成一个维度(6,5)的数组
df2 = pd.DataFrame(data2,index=['a','b','c','d' ,'e' , 'f'] , columns = ['A', 'B', 'C','D','E'])							# 创建DataFrame
print(df2)
print("--" * 10)
# DataFrame.head(n=5):显示前n条数据。n表示显示的数据量。
print(df2.head())
print("--" * 10)
# DataFrame.tail(n=5):显示底部数据,和head的参数一样
print(df2.tail(3))

输出:

    A   B   C   D   E
a   0   1   2   3   4
b   5   6   7   8   9
c  10  11  12  13  14
d  15  16  17  18  19
e  20  21  22  23  24
f  25  26  27  28  29
--------------------
    A   B   C   D   E
a   0   1   2   3   4
b   5   6   7   8   9
c  10  11  12  13  14
d  15  16  17  18  19
e  20  21  22  23  24
--------------------
    A   B   C   D   E
d  15  16  17  18  19
e  20  21  22  23  24
f  25  26  27  28  29
  1. 显示索引,列和数据

输入:

print("index is :" )		
print(df2.index)					# 输出行索引
print("columns is :" )
print(df2.columns)					# 输出列索引
print("values is :" )
print(df2.values)					# 输出数据

输出:

index is :
Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
columns is :
Index(['A', 'B', 'C', 'D', 'E'], dtype='object')
values is :
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]
 [25 26 27 28 29]]

使用loc方法,根据列名对相关索引进行切片,得到想要访问的数据。

# DataFrame.loc:按标签或布尔数组访问一组行和列
print(df2.loc['a':'f':2,'A'])		# 获取A列,索引为a到f(包括f)中的数据,步长为2

输出:

a     0
c    10
e    20
Name: A, dtype: int64
  1. 查看数据的详细信息

DataFrame.describe(percentiles=None, include=None, exclude=None)

生成描述性统计数据,总结数据集分布的集中趋势,分散和形状,不包括 NaN值。

print(df2.describe()) # describe描述了数据的详细信息

输出:

            A          B          C          D          E
count   6.000000   6.000000   6.000000   6.000000   6.000000
mean   12.500000  13.500000  14.500000  15.500000  16.500000
std     9.354143   9.354143   9.354143   9.354143   9.354143
min     0.000000   1.000000   2.000000   3.000000   4.000000
25%     6.250000   7.250000   8.250000   9.250000  10.250000
50%    12.500000  13.500000  14.500000  15.500000  16.500000
75%    18.750000  19.750000  20.750000  21.750000  22.750000
max    25.000000  26.000000  27.000000  28.000000  29.000000

5.DataFrame数据的操作

  1. 使用drop方法删除不需要的列或行

DataFrame.drop(labels = None,axis = 0,index = None,columns = None,level = None,inplace = False,errors ='raise' )

通过指定标签名称和相应的轴,或直接指定索引或列名称来删除行或列。labels标签名,axis选择行或列(0表示行,1表示列),index 直接指定要删除的行,columns 直接指定要删除的列,inplace=False,默认该删除操作不改变原数据,而是返回一个执行删除操作后的新DataFrame。

data3 = np.arange(30).reshape(6,5)
df3 = pd.DataFrame(data3,index=['a','b','c','d','e', 'f'] , columns = ['A', 'B', 'C', 'D', 'E'])
a = df3.drop(['a'], axis=0)				# axis=0时 删除指定的行
b = df3.drop(['A'], axis=1)				# axis=1时,删除指定的列
print('-------原始数据df-----')
print(df3)
print('-------删除行---------')
print(a)
print('-------删除列---------')
print(b)

输出:

-------原始数据df-----
    A   B   C   D   E
a   0   1   2   3   4
b   5   6   7   8   9
c  10  11  12  13  14
d  15  16  17  18  19
e  20  21  22  23  24
f  25  26  27  28  29
-------删除行---------
    A   B   C   D   E
b   5   6   7   8   9
c  10  11  12  13  14
d  15  16  17  18  19
e  20  21  22  23  24
f  25  26  27  28  29
-------删除列---------
    B   C   D   E
a   1   2   3   4
b   6   7   8   9
c  11  12  13  14
d  16  17  18  19
e  21  22  23  24
f  26  27  28  29
  1. 使用append方法合并两个DataFrame

DataFrame.append(other,ignore_index = False,verify_integrity = False,sort = None )

将其他行附加到调用者的末尾,返回一个新对象。other为要追加的数据。

c = b.append(a,sort=True)	
print(b)
print('------合并后产生的新数据------')
print(c)

输出:

    B   C   D   E
a   1   2   3   4
b   6   7   8   9
c  11  12  13  14
d  16  17  18  19
e  21  22  23  24
f  26  27  28  29
------合并后产生的新数据------
      A   B   C   D   E
a   NaN   1   2   3   4
b   NaN   6   7   8   9
c   NaN  11  12  13  14
d   NaN  16  17  18  19
e   NaN  21  22  23  24
f   NaN  26  27  28  29
b   5.0   6   7   8   9
c  10.0  11  12  13  14
d  15.0  16  17  18  19
e  20.0  21  22  23  24
f  25.0  26  27  28  29
  1. 使用reset_index方法还原索引,让索引变为数据中的一列

DataFrame.reset_index(level = None,drop = False,inplace = False,col_level = 0,col_fill ='' )

重置索引:level默认为None仅从索引中删除给定的级别,默认情况下删除所有级别。drop表示是否将索引添加至数据成为一列。

b.reset_index(inplace=True)# inplace为true时会修改原始数据,为False会产生新的数据

6.Pandas中缺失数据的操作

  1. Pandas中缺少的数据默认使用NaN填充
df6 = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
# 使用reindex方法设置新的索引,多出的索引对应的数据使用NaN填充
df6 = df6.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df6)

输出:

      one       two     three
a -1.301964 -0.073759 -0.008598
b       NaN       NaN       NaN
c -0.410554 -0.226690  0.508727
d       NaN       NaN       NaN
e -0.420417  0.264073 -0.232839
f  0.273617  1.037572  0.623791
g       NaN       NaN       NaN
h -0.136863 -0.964579 -0.173560
  1. 检查是否存在缺失
df7 = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df7 = df7.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
# reindex方法可以重置索引,多余的索引会被填充NaN
print(df7['one'].isnull())	# isnull方法可以检查数据中是否有空值

输出:

a    False
b     True
c    False
d     True
e    False
f    False
g     True
h    False
Name: one, dtype: bool
  1. 缺失数据的计算

求和数据时,NaN将被视为0,如果数据全部是NaN,那么结果将是NaN。

df8 = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df8 = df8.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df8)
print(df8['one'].sum())

输出:

       one       two     three
a  2.027398  0.056812  0.472538
b       NaN       NaN       NaN
c  1.569014 -0.449907  2.184448
d       NaN       NaN       NaN
e  0.178915 -0.259276 -0.350310
f -0.880906  0.132635  0.255886
g       NaN       NaN       NaN
h -0.313819  0.464704  1.117843
2.580602384482807
  1. 用标量替换NaN

DataFrame.fillna(value = None,method = None,axis = None,inplace = False,limit = None,downcast = None,** kwargs )

使用指定的方法和数据填充NA / NaN值。Value表示填充数据,method表示填充方法(‘backfill’,‘bfill’,‘pad’,‘ffill’,None)

df9 = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one',
'two', 'three'])
df9 = df9.reindex(['a', 'b', 'c'])
print(df9)
print("NaN replaced with '0':")
print(df9.fillna(0))	# fillna方法可以使用指定数据来填充NaN

输出:

     one       two     three
a -2.171272 -1.143815 -2.022801
b       NaN       NaN       NaN
c  1.041079  0.523148  0.079901
NaN replaced with '0':
        one       two     three
a -2.171272 -1.143815 -2.022801
b  0.000000  0.000000  0.000000
c  1.041079  0.523148  0.079901
  1. 删除带有NaN的数据

DataFrame.dropna(axis = 0,how ='any',thresh = None,subset = None,inplace = False )

删除缺失值。How表示删除的方式(any:删除存在NA值的行或列;all:删除全部为NA的列或行)

df10 = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f','h'],columns=['one', 'two', 'three'])
df10 = df10.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df10)
print("---"*10)
print(df10.dropna())# 丢弃全部值为NaN的行,可以设置参数how=all来删除所有存在NaN值的行

输出:

       one       two     three
a  0.314272  0.359712 -0.384114
b       NaN       NaN       NaN
c  1.105737  1.290604  2.356330
d       NaN       NaN       NaN
e  0.995182  0.150164  1.460220
f  1.691751  2.155625  0.143025
g       NaN       NaN       NaN
h  1.859988 -1.575294  0.063176
------------------------------
        one       two     three
a  0.314272  0.359712 -0.384114
c  1.105737  1.290604  2.356330
e  0.995182  0.150164  1.460220
f  1.691751  2.155625  0.143025
h  1.859988 -1.575294  0.063176

三、总结

系统性地介绍了

1、python科学计算的第三方库NumPy的相关操作。其中包含numpy的导入,numpy中的数据类型,以及numpy中一些简单运算函数的使用等知识。

2、python第三方库Pandas一些基本命令,它提供了诸多的数据处理方法和时间序列的操作方法,也是提供高性能易用数据类型和分析工具。在实验中介绍了DataFrame,Series两种数据结构的常用操作以及关于缺失值的处理。为后期机器学习打基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java面向对象程序开发——多线程开发

文章目录 前言多线程多线程的实现①、继承Thread类Thread常用方法Thread的构造器优缺点 ②、实现Runnable接口优缺点 ③、实现Callable接口Runnable接口和继承Thread类的区别 线程同步机制volatile同步锁 同步方法lock锁 线程池 前言 线程(thread)是一个程序内部的一条执行路径…

shared_ptr产生内存泄漏的场景

使用 shared_ptr 可以帮助管理动态分配的内存,它使用引用计数的方式来跟踪共享对象的引用数量,当引用计数为零时,会自动释放内存。然而,shared_ptr 也存在一些潜在的内存泄漏的场景,下面是一些常见的情况: …

LVS和keepa lived群集

keepa lived 简述 一.keepalived 服务重要功能 1管理LS负载均衡器软件 keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理Lvs配置以及服务的启动 停止功能 这会使 LVS应用跟更加简便 2 支持故障自动切换 (failover) ①两台知己同时安装好kee…

网络字节序和套接字

4.1主机字节序列和网络字节序列 主机字节序列分为:大端字节序和小端字节序 大端:高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。 小端:高位字节存储在内存的高地址处,低位字节存储在内存的低地址处。…

【算法基础】数据结构

链表 单链表 826. 单链表 - AcWing题库 #include<bits/stdc.h> using namespace std; const int N 100010; int m; int e[N],ne[N];//记录数据和下一结点坐标 int head,idx;//当前指向的结点 void init() {head-1;idx0; } void addtohead(int x) {e[idx]x;ne[idx]hea…

前端框架Vue

Vue 介绍 官方网站&#xff1a;https://cn.vuejs.org/ Vue.js是一种用于构建用户界面的开源JavaScript框架。它是一种轻量级的框架&#xff0c;易于学习和使用。它基于标准HTML&#xff0c;CSS和JavaScript构建&#xff0c;并提供了一套生声明式的&#xff0c;组件时的编程模…

【深入浅出 Spring Security(十三)】使用 JWT 进行前后端分离认证(附源码)

使用 JWT 进行前后端分离认证 一、JWT 的简单介绍二、使用 JWT 进行安全认证后端结合SpringSecurity实现前端Vue3结合Pinia、Axios实现测试结果 一、JWT 的简单介绍 JWT 全称 Java web Token&#xff0c;在此所讲述的是 JWT 用于身份认证&#xff0c;用服务器端生成的JWT去替代…

spring--Ioc控制反转/DI依赖注入

IOC控制反转-解耦 1.概念&#xff1a;在使用对象的时候&#xff0c;由主动的new转换为外部提供对象&#xff0c;将对象创建的控制权交给外部&#xff0c;即控制反转 2.spring提供了一个容器&#xff0c;称为IOC容器&#xff0c;用来从当ioc中的外部 3.被管理或者被创建的对象在…

ChatGPT实战:如何规划自己的职业生涯?

ChatGPT的出现&#xff0c;不仅改变了人们对人工智能技术的认识&#xff0c;也对经济社会发展产生了深远的影响。那么&#xff0c;在ChatGPT时代&#xff0c;人们应该如何规划自己的职业呢&#xff1f; 职业规划是一个有意义且重要的过程&#xff0c;它可以帮助你在职业生涯中…

什么是BI可视化?企业管理决策为什么要用BI系统?

在当今的商业环境中&#xff0c;数据已经成为企业决策制定的重要基础。然而&#xff0c;面对海量的数据&#xff0c;如何有效地分析和利用这些数据&#xff0c;成为了企业管理者面临的一大挑战。BI(Business Intelligence)系统应运而生&#xff0c;它可以帮助企业管理者从复杂的…

基于Java企业人事管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

如何用好强大的 TDengine 集群 ? 先了解 RAFT 在 3.0 中的应用

大家都知道&#xff1a;由于单机数据库在数据规模、并发访问量等方面存在瓶颈&#xff0c;无法满足大规模应用的需求。因此才有了把数据切割分片&#xff0c;分布存储分布处理在多个节点上的数据库&#xff0c;也就是分布式数据库的由来。 而为了实现数据库的高可用&#xff0…

新装Ubuntu虚拟机环境--基本配置流程

新装Ubuntu虚拟机环境--基本配置流程 安装vmware tools修改源 安装vmware tools 点击菜单栏–>虚拟机–>安装VMwaretools桌面上有个图标&#xff0c;点进去 打开这个压缩包–>Extract到桌面&#xff08;or别的文件夹都可以&#xff0c;如果提示空间不足就换其它文件夹…

手把手写一个LED驱动(1)

目录 1.开启驱动开发之路 1.1、驱动开发的准备工作 1.2、驱动开发的步骤 1.3、实践 2.最简单的模块源码分析 2.1、常用的模块操作命令 2.2、模块的安装 2.3、模块的版本信息vermagic 2.4、模块卸载 2.5、模块中常用宏(MODULE_xxx这种宏的作用是用来添加模块描述信息) …

2023年仪器仪表行业研究报告

第一章 行业概况 仪器仪表行业是指专门从事研究、设计、制造、销售和服务于科学研究、生产和生活中所需的各种仪器、仪表和自动化设备的行业。这些仪器和仪表可以用于测量、指示、记录、调节和控制物理、化学和生物过程中的各种参数。这个行业涵盖了广泛的设备和系统&#xff…

今日分享:Midjourney巧妙地用参考图/垫图来绘画图

大家都知道AI绘画工具每次生成的效果都是随机的&#xff0c;但是现在很多AI绘图工具都提供了利用参考图/垫图的方式出图&#xff0c;这样就可以让让AI画作生成自己想要的布局、场景、色彩等等。 国内的AI绘图工具一般都好操作&#xff0c;国外主流的Midjourney也可以添加参考图…

利用for循环和innerHTML在div中再填入多个div

目录 棋盘给每个小格子加上不同的id加上不同的参数传入 我们设置小格子的点击触发事件 循环填充元素 棋盘 先做棋盘&#xff0c;点击出现 <!DOCTYPE HTML> <html><head><meta charset"utf-8"><style>.sty1{background-color:#aaa;he…

旅游网站制作搭建,为旅行业务带来新机遇

旅游业在全球范围内一直都是蓬勃发展的行业之一。随着互联网的普及以及人们对旅行需求的增加&#xff0c;拥有一个精美而功能强大的旅游网站已经成为了旅行从业者的必备条件。本文旨在简单介绍旅游网站是什么&#xff0c;旅游网站的好处&#xff0c;并提供一些快速制作搭建旅游…

10亿上下文!微软新作,引入LongNet将Transformers上下文长度扩充到10亿

夕小瑶科技说 原创 作者 | python, ZenMogre Transformer处理长序列时较为吃力。因为global attention的存在&#xff0c;模型的时间复杂度是序列长度的2次方级。为了建模更长的上下文&#xff0c;人们也提出了各种稀疏注意力机制。而这次&#xff0c;微软卷到家了&#xff0…

word免费转为pdf怎么转,分享这几个方法给大家!

将Word文档转换为PDF格式是一种常见的需求&#xff0c;因为PDF文件具有广泛的兼容性和安全性。本文将介绍三种免费转换Word为PDF的方法&#xff0c;包括记灵在线工具、使用Word自带功能以及使用Smallpdf。这些方法简单易行&#xff0c;帮助您轻松完成转换&#xff0c;方便与他人…