当前位置: 首页 > news >正文

Pandas数据结构

文章目录

    • 1. Series数据结构
      • 1.1 Series数据类型创建
      • 1.2 Series的常用属性
        • values
        • index/keys()
        • shape
        • T
        • loc/iloc
      • 1.3 Series的常用方法
        • mean()
        • max()/min()
        • var()/std()
        • value_counts()
        • describe()
      • 1.4 Series运算
        • 加/减法
        • 乘法
    • 2. DataFrame数据结构
      • 2.1 DataFrame数据类型创建
      • 2.2 布尔索引 ★
      • 2.3 DataFrame的常用属性和方法
      • 2.4 DataFrame更改操作
        • 改行索引
        • 解除行索引
        • 改行列名
        • 修改所有的行列
        • 增加、删除列
        • 删除行列
    • 3. Pandas数据导入导出


1. Series数据结构

Series是Pandas的基础数据结构,代表着一列数据,其底层是由Numpy实现的。

Series的特点:

  1. 所有的元素类型都是一致的;
  2. 如果创建Series时,传入整数列表,默认每个元素的类型都是np.int64;
  3. 如果创建Series时,传入的是小数和整数混合列表,默认每个元素的类型都是np.float64
  4. 如果创建Series时,传入的是其他类型的混合,默认每个元素的类型都是object;
  5. 如果创建Series时,传入的是字符串类型列表,默认每个元素的类型也是object。

1.1 Series数据类型创建

利用pd.Series创建一个Series对象,传入的列表作为Series中的数据。

import pandas as pd
s = pd.Series(['Banana', 42])
print(s)'''
代码输出:
0    Banana
1        42
dtype: object
'''

从代码的执行结果中可以发现,当前的Series的数据类型是object。

使用·s.values·属性,可以获去Series中的数据,数据的类型是一个Ndarray。

print(s.values)
print(type(s.values))
'''
代码输出:
['Banana' 42]
<class 'numpy.ndarray'>
'''

如果使用整数和浮点数的混合列表作为参数,Series的默认类型是np.float64类型。

print(pd.Series([1,1.2])
'''
代码输出:
0    1.0
1    1.2
dtype: float64
'''

在创建Series对象时,可以指定行索引index(Series代表一列数据)。

print(pd.Series(['Bill Gates', 'Male'], index=['Name', 'Gender']))
'''
代码输出:
Name      Bill Gates
Gender          Male
dtype: object
'''

注意:
Series代表Pandas数据结构中的列,在Pandas中没有表示行的数据结构。

1.2 Series的常用属性

使用pd.read_csv从CSV文件中加载数据,同时指定数据中的id列作为行索引。

data = pd.read_csv('data/nobel_prizes.csv',index_col='id')

使用loc获取数据中的第941行,此时的row就是一个Series对象。

row = data.loc[941]

loc对应的是行索引,如果行索引是从0开始的数字(和行编号一致),此时lociloc作用相同。

注意:
由于Pandas中没有对应行的数据结构,所以获得第941行之后,数据行被转换成了列,也就是一个Series

使用Print查看数据值:

print(row)
'''
代码输出:
year                                                              2017
category                                                       physics
overallMotivation                                                  NaN
firstname                                                       Rainer
surname                                                          Weiss
motivation           "for decisive contributions to the LIGO detect...
share                                                                2
Name: 941, dtype: object
'''
values

values属性表示当前Series对象的值,类型是Ndarray:

print(row.values)
print(type(row.values))
'''
代码输出:
[2017 'physics' nan 'Rainer' 'Weiss''"for decisive contributions to the LIGO detector and the observation of gravitational waves"'2]
<class 'numpy.ndarray'>
'''
index/keys()

index属性表示当前Series的行索引:

print(row.index)
'''
代码输出:
Index(['year', 'category', 'overallMotivation', 'firstname', 'surname','motivation', 'share'],dtype='object')
'''

keys()方法可以达到同样的效果:

print(row.keys())
# 代码结果和row.index完全相同
shape

shape属性表示当前Series的行数和列数,是一个元组,由于Series表示一列数据,所以没有列数值:

print(row.shape)
'''
代码输出:
(7,)
'''
T

T属性表示当前Series的转置,由于Pandas没有行数据结构,所以转置之后和没有转置没什么区别:

print(row.T)
'''
代码输出:
year                                                              2017
category                                                       physics
overallMotivation                                                  NaN
firstname                                                       Rainer
surname                                                          Weiss
motivation           "for decisive contributions to the LIGO detect...
share                                                                2
Name: 941, dtype: object
'''
loc/iloc

loc可以通过行列索引获取对应的行列,iloc通过行列序号获取对应的行列:

print(row.loc['year'])
print(row.iloc[0])
'''
代码输出:
2017
2017
'''

注意:
lociloc的完整使用方法是:

  • loc[行索引,列索引]
  • iloc[行序号,列序号]

1.3 Series的常用方法

首先,使用数据.列名的方式获取一列数据,形成一个Series对象:

share = data.share
print(share)
'''
代码输出:
id
941    2
942    4
943    4
944    3
945    3..
160    1
293    1
569    1
462    2
463    2
Name: share, Length: 923, dtype: int64
'''
mean()

求平均:

print(share.mean())
'''
代码输出:
1.982665222101842
'''
max()/min()

求最大/小值:

print(share.max())
print(share.min())
'''
代码输出:
4
1
'''
var()/std()

方差和标准差:

print(share.var())
print(share.std())
'''
代码输出:
0.8695473357414776
0.9324952202244672
'''
value_counts()

获取每个值在当前Series对象中的个数:

print(share.value_counts())
'''
代码输出:
1    347
2    307
3    207
4     62
Name: share, dtype: int64
'''

以上输出的含义是,单个人获得诺贝尔奖项的有347次,两个人获得诺贝尔奖项的有307次,三个人获得诺贝尔奖项的有207次…

describe()

计算当前Series对象的各种特征值:

print(share.describe())
'''
代码输出:
count    923.000000
mean       1.982665
std        0.932495
min        1.000000
25%        1.000000
50%        2.000000
75%        3.000000
max        4.000000
Name: share, dtype: float64
'''

1.4 Series运算

创建两个Series对象:

s1 = pd.Series([1,2,3])
s2 = pd.Series([4,5,6])
加/减法

Series执行加法运算时,采用对位相加的方式。

print(s1 + s2)
print(s1 - s2)
'''
代码输出:
0    5
1    7
2    9
dtype: int64
0   -3
1   -3
2   -3
dtype: int64
'''

注意:
对位相加减是基于index值的,也就是说在加减运算执行时,两个index相同的值才算对位。

如果加减运算时,存在index不对位的情况,就会返回NaN值:

print(s1 + pd.Series([0,1]))
'''
代码输出:
0    1.0
1    3.0
2    NaN
dtype: float64
'''

注意!如果我们把其中一个Series对象的index倒序排列,依然不影响最终的结果:

# 倒序排列s2的行索引,再次执行加法,结果不变
print(s1 + s2.sort_index(ascending=False)
乘法

乘法也是对位相乘的:

print(s1 * s2)
'''
代码输出:
0     4
1    10
2    18
dtype: int64
'''

2. DataFrame数据结构

DataFrame是Pandas最重要的数据结构,由一个个的Series组成,可以视为一个二维表:

2.1 DataFrame数据类型创建

pd.DataFrame()方法接收一个字典对象作为参数,每个字典的键值对代表一列数据:

name_list = pd.DataFrame({'Name':['Tom','Bob'],'Job':['Java','Python'],'Age':[28,46]
})
print(name_list)
'''
代码输出:Name     Job  Age
0  Tom    Java   28
1  Bob  Python   46
'''

我们也可以在创建DataFrame的时候,直接指定索引:

  • 通过index参数指定行索引
  • 通过column参数指定列索引
print(pd.DataFrame(data={'Job': ['Java', 'Python'],'Age': [28, 46]},index=['Tom', 'Bob'],columns=['Job', 'Age'])
)
'''
代码输出:Job  Age
Tom    Java   28
Bob  Python   46
'''

2.2 布尔索引 ★

首先,加载数据:

sci = pd.read_csv('data/scientists.csv')
print(sci)
'''
代码输出:Name        Born        Died  Age          Occupation
0     Rosaline Franklin  1920-07-25  1958-04-16   37             Chemist
1        William Gosset  1876-06-13  1937-10-16   61        Statistician
2  Florence Nightingale  1820-05-12  1910-08-13   90               Nurse
3           Marie Curie  1867-11-07  1934-07-04   66             Chemist
4         Rachel Carson  1907-05-27  1964-04-14   56           Biologist
5             John Snow  1813-03-15  1858-06-16   45           Physician
6           Alan Turing  1912-06-23  1954-06-07   41  Computer Scientist
7          Johann Gauss  1777-04-30  1855-02-23   77       Mathematician
'''

取出数据的前5条,head()方法默认取前五条:

sci_5 = sci.head()

布尔索引的使用方法:

bool_index = [True, False, False, False, True]
print(sci_5[bool_index])
'''
代码输出:Name        Born        Died  Age Occupation
0  Rosaline Franklin  1920-07-25  1958-04-16   37    Chemist
4      Rachel Carson  1907-05-27  1964-04-14   56  Biologist
'''

布尔索引中,对应行的值为True就返回,否则就过滤掉。
布尔索引列表必须和数据长度一致,否则会报错。

在实际使用过程中,不可能手动的构造一个布尔索引,通常情况下会通过计算直接生成一个布尔列表。
比如,针对当前数据,我们可以筛选所有年龄大于平均年龄的科学家数据行:

print(sci[sci.Age > sci.Age.mean()]
)
'''
代码输出:Name        Born        Died  Age     Occupation
1        William Gosset  1876-06-13  1937-10-16   61   Statistician
2  Florence Nightingale  1820-05-12  1910-08-13   90          Nurse
3           Marie Curie  1867-11-07  1934-07-04   66        Chemist
7          Johann Gauss  1777-04-30  1855-02-23   77  Mathematician
'''

2.3 DataFrame的常用属性和方法

movie = pd.read_csv('data/movie.csv')
movie.shape 	# 行列数
movie.ndim		# 维度
movie.values	# 值
movie.size		# 元素个数
len(movie)		# 行数
movie.count()	# 计算行数,过滤空行(空行不算行数)
movie.describe()# 对数值列进行特征计算movie + movie	# 数值直接对位相加,字符串直接拼接

2.4 DataFrame更改操作

改行索引

将行索引由数字索引更改为movie_title列:

movie.set_index('movie_title',inplace=True)
解除行索引

解除当前的行索引,并使用数字索引:

movie.reset_index()
改行列名
movie.rename(index={'Avatar':'阿凡达','Star Wars: Episode VII - The Force Awakens':'星期大战7'},columns={'director_name':'导演','color':'颜色'},inplace=True
)
修改所有的行列
index = movie.index.to_list()
index[0] = '阿凡达'
movie.index = index
增加、删除列
movie['has_seen'] = 0
movie['社交媒体点赞数量'] = movie.actor_1_facebook_likes+movie.actor_2_facebook_likes+movie.actor_3_facebook_likes+movie.director_facebook_likes# 在指定位置插入指定列
movie.insert(loc=0,column='利润',value=movie.gross - movie.budget
)
删除行列
movie.drop('社交媒体点赞数量',axis=1)
# axis=1表示删除列
movie.drop('阿凡达')
# 删除行

3. Pandas数据导入导出

# movie.to_pickle('data/movie.pickle')
# movie.to_csv('data/movie2.csv')
# movie.to_csv('data/movie2.tsv',sep='\t')
# movie.to_excel('data/movie.xlsx')
# movie.read_csv()
# movie.read_pickle()
# movie.read_csv(sep='\t')
# movie.read_excel()

相关文章:

Pandas数据结构

文章目录 1. Series数据结构1.1 Series数据类型创建1.2 Series的常用属性valuesindex/keys()shapeTloc/iloc 1.3 Series的常用方法mean()max()/min()var()/std()value_counts()describe() 1.4 Series运算加/减法乘法 2. DataFrame数据结构2.1 DataFrame数据类型创建2.2 布尔索引…...

systemverilog function的一点小case

关于function的应用无论是在systemverilog还是verilog中都有很广泛的应用&#xff0c;但是一直有一个模糊的概念困扰着我&#xff0c;今天刚好有时间来搞清楚并记录下来。 关于fucntion的返回值的问题&#xff1a; function integer clog2( input logic[255:0] value);for(cl…...

微服务的初步使用

环境说明 jdk1.8 maven3.6.3 mysql8 idea2022 spring cloud2022.0.8 微服务案例的搭建 新建父工程 打开IDEA&#xff0c;File->New ->Project&#xff0c;填写Name&#xff08;工程名称&#xff09;和Location&#xff08;工程存储位置&#xff09;&#xff0c;选…...

【2023年11月第四版教材】第18章《项目绩效域》(合集篇)

第18章《项目绩效域》&#xff08;合集篇&#xff09; 1 章节内容2 干系人绩效域2.1 绩效要点2.2 执行效果检查2.3 与其他绩效域的相互作用 3 团队绩效域3.1 绩效要点3.2 与其他绩效域的相互作用3.3 执行效果检查3.4 开发方法和生命周期绩效域 4 绩效要点4.1 与其他绩效域的相互…...

Android 11.0 mt6771新增分区功能实现三

1.前言 在11.0的系统开发中,在对某些特殊模块中关于数据的存储方面等需要新增分区来保存, 所以就需要在系统分区新增分区,接下来就来实现这个功能,看系列三的实现过程 2.mt6771新增分区功能实现三的核心类 build/make/tools/releasetools/common.py device/mediatek/mt6…...

计算机网络——计算机网络的性能指标(上)-速率、带宽、吞吐量、时延

目录 速率 比特 速率 例1 带宽 带宽在模拟信号系统中的意义 带宽在计算机网络中的意义 吞吐量 时延 发送时延 传播时延 处理时延 例2 例3 速率 了解速率之前&#xff0c;先详细了解一下比特&#xff1a; 比特 计算机中数据量的单位&#xff0c;也是信息论中信…...

每日一题 518零钱兑换2(完全背包)

题目 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带符号整…...

Linux shell编程学习笔记8:使用字符串

一、前言 字符串是大多数编程语言中最常用最有用的数据类型&#xff0c;这在Linux shell编程中也不例外。 本文讨论了Linux Shell编程中的字符串的三种定义方式的差别&#xff0c;以及字符串拼接、取字符串长度、提取字符串、查找子字符串等常用字符串操作,&#xff0c;以及反…...

【Spring笔记03】Spring依赖注入各种数据类型

这篇文章&#xff0c;详细介绍一下Spring框架中如何注入各种数据类型&#xff0c;包含&#xff1a;注入基本数据类型、数组、集合、Map映射、Property属性、注入空字符串、注入null值、注入特殊字符等内容&#xff0c;以及如何使用命名空间进行依赖注入。 目录 一、注入各种数据…...

2023计算机保研——双非上岸酒吧舞

我大概是从22年10月份开始写博客的&#xff0c;当时因为本校专业的培养方案的原因&#xff0c;课程很多&#xff0c;有些知识纸质记录很不方便&#xff0c;于是选择了打破了自己的成见使用博客来记录学习生活。对于我个人而言&#xff0c;保研生活在前一大半过程中都比较艰难&a…...

《计算机视觉中的多视图几何》笔记(13)

13 Scene planes and homographies 本章主要讲述两个摄像机和一个世界平面之间的射影几何关系。 我们假设空间有一平面 π \pi π&#xff0c;平面上的一点为 x π x_{\pi} xπ​。 x π x_{\pi} xπ​分别在两幅图像 P , P ′ P, P P,P′上形成了 x , x ′ x, x x,x′。 那…...

H5移动端购物商城系统源码 小型商城全新简洁风格全新UI 支持易支付接口

一款比较简单的 H5 移动端购物商城系统源码&#xff0c;比较适合单品商城、小型商城使用。带有易支付接口。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88391704 源码下载2&#xff1a;评论留言或私信留言...

全志ARM926 Melis2.0系统的开发指引⑤

全志ARM926 Melis2.0系统的开发指引⑤ 编写目的8. 固件修改工具(ImageModify)使用8.1.界面说明8.2.操作步骤8.2.1. 配置平台8.2.2. 选择固件8.2.3. 选择要替换的文件8.2.4. 替换文件8.2.5. 保存固件 8.3.注意事项8.4.增加固件修改权限设置8.4.1. 概述8.4.2. 操作说明8.4.2.1.打…...

【AI视野·今日Robot 机器人论文速览 第四十七期】Wed, 4 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 4 Oct 2023 Totally 40 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;基于神经网络的多模态触觉感知, classification, position, posture, and force of the grasped object多模态形象的解耦(f…...

GPX可视化工具 GPX航迹预览工具

背景 当我们收到别人分享的航迹文档&#xff0c;即gpx文档时&#xff0c;如何快速的进行浏览呢&#xff1f;我们可以使用GIS软件来打开gpx文档并显示gpx中所记录的航迹&#xff0c;例如常用的GIS软件有googleEarth&#xff0c; Basecamp&#xff0c; GPXsee&#xff0c; GPX E…...

学信息系统项目管理师第4版系列18_采购管理

1. 协议 1.1. 合同 1.1.1. 国际合作的项目经理应牢记&#xff0c;无论合同规定如何详尽&#xff0c;文化和当地法律对合同及其可执行性均有影响 1.2. 服务水平协议&#xff08;SLA&#xff09; 1.3. 谅解备忘录 1.4. 协议备忘录&#xff08;MOA&#xff09; 1.5. 订购单 …...

标准化数据模型

标准化数据模型 标准化被定义为减少或消除数据集中冗余的过程。 它已成为关系数据库中数据建模的事实上的方法&#xff0c;很大程度上是由于这些系统最初设计时所围绕的底层资源限制&#xff1a;缓慢的磁盘和昂贵的 RAM。更少的数据冗余/重复意味着更有效地从磁盘读取数据并占…...

linux平台源码编译ffmpeg

目录 编译平台 编译步骤 编译平台 中标麒麟 编译步骤 1 从Download FFmpeg 下载源码&#xff0c;我选中了4.2.9版 2 解压 3 在解压后的目录下输入 ./configure --enable-shared --prefix/usr/local/ffmpeg 4 make 5 sudo make install 6 ffmpeg的头文件、可执行程…...

Vue中如何进行拖拽与排序功能实现

在Vue中实现拖拽与排序功能 在Web应用程序中&#xff0c;实现拖拽和排序功能是非常常见的需求&#xff0c;特别是在管理界面、任务列表和图形用户界面等方面。Vue.js作为一个流行的JavaScript框架&#xff0c;提供了许多工具和库来简化拖拽和排序功能的实现。本文将介绍如何使…...

新款UI动态壁纸头像潮图小程序源码

新款UI动态壁纸头像潮图小程序源码&#xff0c;不需要域名服务器&#xff0c;直接添加合法域名&#xff0c;上传发布就能使用。 可以对接开通流量主&#xff0c;个人也能运营&#xff0c;不需要服务器源码完整。整合头像&#xff0c;动态壁纸&#xff0c;文案功能齐全。 源码…...

Python逐日填补Excel中的日期并用0值填充缺失日期的数据

本文介绍基于Python语言&#xff0c;读取一个不同的列表示不同的日期的.csv格式文件&#xff0c;将其中缺失的日期数值加以填补&#xff1b;并用0值对这些缺失日期对应的数据加以填充的方法。 首先&#xff0c;我们明确一下本文的需求。现在有一个.csv格式文件&#xff0c;其第…...

【C语言经典100例题-70】求一个字符串的长度(指针)

代码 使用指针来遍历字符串&#xff0c;直到遇到字符串结尾的空字符\0为止&#xff0c;统计字符数量即为字符串长度。 #include<stdio.h> #define n 20 int getlength(char *a) {int len 0;while(*a!\0){len;a;}return len; } int main() {char *arr[n] { 0 };int l…...

十天学完基础数据结构-第八天(哈希表(Hash Table))

哈希表的基本概念 哈希表是一种数据结构&#xff0c;用于存储键值对。它的核心思想是将键通过哈希函数转化为索引&#xff0c;然后将值存储在该索引位置的数据结构中。 哈希函数的作用 哈希函数是哈希表的关键部分。它将输入&#xff08;键&#xff09;映射到哈希表的索引位…...

flink集群部署

虚拟机配置 bigdata-hmaster 192.168.135.112 4核心 32GB bigdata-hnode1 192.168.135.113 4核心 16GB bigdata-hnode2 192.168.135.114 4核心 16GB 安装包&#xff1a;https://dlcdn.apache.org/flink/flink-1.17.1/flink-1.17.1-bin-scala_2.12.tgz 放到/usr/lcoal/lib目录…...

2.证明 非单一点 Oct.2023

目录 原题解引申出的编程问题非单一点题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 题解题目正解 原题 已知等边 Δ P 0 P 1 P 2 \Delta P_0P_1P_2 ΔP0​P1​P2​&#xff0c;它的外接圆是 O O O&#xff0c;设 O O O的半径是 R R R。同时&#xff0c;设 Δ …...

常见的软件脱壳思路

单步跟踪法 1.本方法采用OD载入。 2.跟踪F8&#xff0c;实现向下的跳。 3.遇到程序回跳按F4。 4.绿色线条表示跳转没实现&#xff0c;不用理会&#xff0c;红色线条表示跳转已经实现&#xff01; 5.刚载入程序有一个CALL的&#xff0c;我们就F7跟进去&#xff0c;不然程序很容…...

Python:torch.nn.Conv1d(), torch.nn.Conv2d()和torch.nn.Conv3d()函数理解

Python&#xff1a;torch.nn.Conv1d(), torch.nn.Conv2d()和torch.nn.Conv3d()函数理解 1. 函数参数 在torch中的卷积操作有三个&#xff0c;torch.nn.Conv1d(),torch.nn.Conv2d()还有torch.nn.Conv3d(),这是搭建网络过程中常用的网络层&#xff0c;为了用好卷积层&#xff0…...

scala 连接 MySQL 数据库案例

1 依赖准备 mysql 8添加&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency> mysql 5 添加&#xff1a; <dependency><grou…...

guava工具类常用方法

Guava是Google开发的一个Java开源工具类库&#xff0c;它提供了许多实用的工具类和功能&#xff0c;可以简化Java编程中的常见任务。 引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>2…...

CSShas伪类选择器案例附注释

<!DOCTYPE html> <html lang="en"> <head><meta charset...

品牌网站建设开发价格/国内搜索引擎有哪些

随着物联网行业的飞速发展&#xff0c;MQTT 协议也被越来越多的公司及开发者所使用。在学习和使用 MQTT 的过程中&#xff0c;一个得心应手的客户端工具可以极大的方便开发者进行 MQTT 特性的探索及物联网应用的调试&#xff0c;缩短开发周期。 目前 MQTT 客户端工具种类繁多&…...

如何调整网站板块位置/百度app怎么找人工客服

需求分析 功能实现&#xff1a; 输入英文&#xff0c;得出中文翻译输入中文&#xff0c;得到英文翻译 Google翻译地址URL&#xff1a;https://translate.google.cn/ 实现环境 编程语言&#xff1a;python3.6 requests:2.25.1 参考地址 页面分析 静态页面&#xff0c;还是…...

网站最好的优化是什么/网络推广与优化

作者&#xff1a;Walter Garcia 翻译&#xff1a;管长龙 本文来源&#xff1a;https://www.percona.com/blog/2020/10/02/how-to-use-check-constraint-in-mysql-8/ 大家好&#xff0c;在这篇小文章中&#xff0c;我们将介绍 MySQL 8 的一项新功能。 什么是“检查约束”&#…...

南宁百度网站建设公司/如何做网络推广推广

一、查看数据库编码格式mysql> show variables like character_set_database;二、查看数据表的编码格式mysql> show create table ;三、创建数据库时指定数据库的字符集mysql>create database character set utf8;四、创建数据表时指定数据表的编码格式create table t…...

如何制作网站连接数据库/重庆森林为什么叫这个名字

1.算法引入1.1定义在《数学之美》中&#xff0c;吴军教授称EM算法是上帝的算法&#xff0c;为了了解EM算法的奥妙之处。首先说说什么是EM算法&#xff0c;EM算法即最大期望算法&#xff08;Expectation-maximization algorithm&#xff09;&#xff0c;在统计中被用于寻找&…...

wordpress注册关键词/网络推广需要多少钱

Android 消息队列模型详解及实例Android系统的消息队列和消息循环都是针对具体线程的&#xff0c;一个线程可以存在(当然也可以不存在)一个消息队列(Message Queue)和一个消息循环(Looper)。Android中除了UI线程(主线程)&#xff0c;创建的工作线程默认是没有消息循环和消息队列…...