【Mo 人工智能技术博客】基于耦合网络的推荐系统

2023-11-11

基于耦合网络的推荐系统

作者:陈东瑞

1.复杂网络基础知识

当我们拿起手机给家人、朋友或者同事拨打电话时,就不知不觉中参与到了社交网络形成的过程中;当我们登上高铁或者飞机时,就可以享受交通网络给我们带来的方便;即使当我们躺在床上什么也不干时,大脑中的神经元们也会形成巨大的复杂网络相互传递信号,帮助我们思考或者行动。复杂网络是将现实世界中各种大型复杂系统抽象成网络来进行研究的一种理论工具,在自然界中存在的大量复杂系统都可以通过形形色色的网络加以描述。

image.png

1.1 网络的表示方法

一个典型的网络是由许多节点与节点之间的连边组成,其中节点用来代表真实系统中不同的个体,而边则用来表示节点之间的关系,往往是两个节点之间存在某种特定的关系则连一条边,反之则无连接,边相连的两个节点在网络中被看作是相邻的。为了方便计算,我们通常使用邻接矩阵来表示网络。根据网络的边的类型不同,可以将网络分为无权无向网络、有向网络、含权网络,对应的邻接矩阵表示如下:

image.png

1.2 网络的统计特征

  • :与节点直接相连的边数;在有向网络中可以分为出度和入度。
  • 聚集系数:节点的邻居间互为邻居的可能,衡量的是网络的集团化程度

C i = 该节点邻居间实际相连的边的数量 可能的最大连接边数 k i ( k i − 1 ) / 2 C_i = \frac{该节点邻居间实际相连的边的数量}{可能的最大连接边数 k_i(k_i -1)/2} Ci=可能的最大连接边数ki(ki1)/2该节点邻居间实际相连的边的数量

我们对所计算出的聚集系数求算术平均数,可以得到平均聚集系数,并以此来衡量整个网络的聚集程度。

  • 最短路径:两个节点相连的最短连通路径
  • 介数:介数包括节点介数和边介数。
    • 节点介数指网络中所有最短路径中经过该节点的数量比例
    • 边介数则指网络中所有最短路径中经过该边的数量比例
    • 介数反映了相应的节点或者边在整个网络中的作用和影响力

1.3 常见的复杂网络模型

常用的网络模型分为规则网络、随机网络、小世界网络、无标度网络四类。

  • 规则网络

规则网络是简单的网络模型。在这种类型的网络中,任意两个节点之间的连接遵循既定的规则,通常每个节点的近邻数目都相同。
image.png

  • 随机网络

节点之间是否产生连边是完全随机的。
image.png

  • 小世界网络

小世界网络模型是由瓦茨和斯特罗加茨在1998年《自然》上发表的《小世界网络的集体动力学》一文中提出的。他们发现,规则网络的群聚性较高,但网络之平均距离也大;而随机网络的平均距离较短,其群聚性也低。真实世界的网络既非完全规则,也非完全随机,而是介于这两者之间,于是有学者引入了小世界网络模型。
image.png

  • 无标度网络

无标度网络是在网络中的大部分节点(小度节点)只和很少节点连接,而有极少的节点与(大度节点)非常多的节点连接。
image.png

基于复杂网络实现推荐系统的背景介绍

链路预测是指如何通过已知的网络结构等信息,预测网络中尚未产生连边的两个节点之间产生连接的可能性。预测那些已经存在但尚未被发现的连接实际上是一种数据挖掘的过程,而对于未来可能产生的连边的预测则与网络的演化相关。链路预测可以应用在电商网站中。如果将电商网站中的商品看成一类节点,用户看成另一类节点,如果用户A购买了商品b,A与b之间则形成一条连边,这种边只在不同类型的节点间存在的网络成为二分网络,而在二分网络中的链路预测问题其实也是推荐系统的一种。

image.png
下面我们来简单介绍一个基于复杂网络的做推荐系统的文章《Information Filtering via Biased Random Walk on Coupled Social
Network》。文章通过将用户的社交网络和用户——商品二分图网络进行耦合,综合了用户的社交信息与商品偏好信息对用户进行商品推荐。
耦合社交网络(CSN)包含耦合节点(用户),其在社交网络层中形成领导者——跟随者关系和信息网络层中的收藏关系。下图是一个简单的耦合社交网络示意图,圆圈表示用户,方块表示对象。上半部分是五个用户的社交关系网络, U 4 U_4 U4指向 U 5 U_5 U5的连边表示, U 4 U_4 U4 U 5 U_5 U5的追随者,他俩之间存在一定程度的相似性。下半部分是一个二分网络,对象 O 5 O_5 O5与用户 U 5 U_5 U5之间存在连边,表示用户 U 5 U_5 U5收藏了 O 5 O_5 O5 。若只有下半部分网络,我们无法将商品 O 5 O_5 O5推荐给用户 U 4 U_4 U4,当我们将社交网络中 U 4 U_4 U4 U 5 U_5 U5之间的相似性考虑进来后,我们可以将对象 O 5 O_5 O5推荐给用户 U 4 U_4 U4。接下来,我们来具体解释该方法如何在推荐系统中发挥作用。
image.png

3. 模型介绍

对一个推荐系统,我们将其分成两个部分,用户集 U = { U 1 , U 2 , . . . , U m } U = \{U_1, U_2, ...,U_m\} U={U1,U2,...,Um}和对象集 O = { O 1 , O 2 , . . . , O n } O = \{O_1, O_2, ...,O_n\} O={O1,O2,...,On},表示有 m m m个用户和 n n n个对象。定义邻接矩阵 A m ∗ n A_{m*n} Amn来表示该网络,
a i α = { 1 用户 U i 已经收藏了对象 O α 0 用户 U i 没有收藏对象 O α a_{i\alpha} = \begin{cases} 1 & 用户U_i已经收藏了对象O_\alpha \\ 0 & 用户U_i没有收藏对象O_\alpha \end{cases} aiα={10用户Ui已经收藏了对象Oα用户Ui没有收藏对象Oα
邻接矩阵 B m ∗ n B_{m*n} Bmn来表示用户——对象二分图,
b i j = { 1 用户(或对象) i 已经收藏了对象(或用户) j 0 其他 b_{ij} = \begin{cases} 1 & 用户(或对象)i 已经收藏了对象(或用户)j \\ 0 & 其他 \end{cases} bij={10用户(或对象)i已经收藏了对象(或用户)j其他

3.1 社交网络上的随机游走

  • $P_{ij}’ 是社交网络上的转移概率,从用户 是社交网络上的转移概率,从用户 是社交网络上的转移概率,从用户U_i 游走到用户 游走到用户 游走到用户U_j$:

P i j ′ = { b i j k j o u t i f   k j o u t ≠ 0 0 o t h e r w i s e (1) P_{ij}' = \begin{cases} \frac{b_{ij}}{k_j^{out}} & if \ k_j^{out} \neq 0 \\ 0 & otherwise \end{cases}\tag{1} Pij={kjoutbij0if kjout=0otherwise(1)

  • S i ′ ( t ) S_i'(t) Si(t)表示在t时刻其他用户游走到用户 U i U_i Ui的概率,

S i ′ ( t + 1 ) = { ∑ j = 1 m b i j k j o u t i f   k j o u t ≠ 0 0 o t h e r w i s e (2) S_i' (t+1) = \begin{cases} \sum_{j = 1}^{m} \frac{b_{ij}}{k_j^{out}} & if \ k_j^{out} \neq 0 \\ 0 & otherwise \end{cases}\tag{2} Si(t+1)={j=1mkjoutbij0if kjout=0otherwise(2)

  • 初始概率
    • 对于目标用户 U i U_i Ui S i ′ ( 0 ) = 1 S_i'(0) = 1 Si(0)=1
    • 对于其他用户 U j U_j Uj S j ′ ( 0 ) = 1 S_j'(0) = 1 Sj(0)=1
#社交网络上的游走
#输入用户ID,概率prob,文中lama,游走步长step
user_id = '23298'
prob = 1
step = 3
# def social_network_walk(user_id, prob, step):
user_group = trust_df.groupby(trust_df[0])

#第一步游走
id_neighbors = list(user_group.get_group(user_id)[1].values)
user_prob_dic = {}
for user_id in id_neighbors:
        user_prob_dic[user_id] = prob/len(id_neighbors)
user_dict =  user_prob_dic.copy()
#之后的游走
for _ in range(step-2):
    for item in user_dict.items():
        uesr_id = item[0]
        prob = item[1]
        id_neighbors = list(user_group.get_group(user_id)[1].values)
        for user_id in id_neighbors:
            try:
                user_prob_dic[user_id] += prob/len(id_neighbors)
            except KeyError:
                user_prob_dic[user_id] = prob/len(id_neighbors)
    user_dict =  user_prob_dic.copy()
# return user_dict
user_dict

3.2 二分图上的随机游走

  • 用户到商品的转移概率:
    P i α ′ = { a i α k i i f   k i ≠ 0 0 o t h e r w i s e (3) P_{i\alpha}' = \begin{cases} \frac{a_{i\alpha}}{k_i} & if \ k_i \neq 0 \\ 0 & otherwise \end{cases}\tag{3} Piα={kiaiα0if ki=0otherwise(3)
  • 商品到用户的转移概率:
    P α j ′ ′ = { a j α k α i f   k α ≠ 0 0 o t h e r w i s e (4) P_{\alpha j}'' = \begin{cases} \frac{a_{j\alpha}}{k_{\alpha}} & if \ k_{\alpha} \neq 0 \\ 0 & otherwise \end{cases}\tag{4} Pαj′′={kαajα0if kα=0otherwise(4)
  • 定义 S α ′ ′ ( t ) S_{\alpha}'' (t) Sα′′(t) S j ′ ′ ( t ) S_{j}'' (t) Sj′′(t) 为二部图中商品 α \alpha α 和用户 t t t 在时刻的概率:

S i ′ ’ ( t + 1 ) = { ∑ α = 1 m a i α k α S α ′ ′ ( t ) i f   k α ≠ 0 0 o t h e r w i s e (5) S_i'’ (t+1) = \begin{cases} \sum_{\alpha = 1}^{m} \frac{a_{i\alpha}}{k_{\alpha}} S_{\alpha}''(t)& if \ k_{\alpha} \neq 0 \\ 0 & otherwise \end{cases}\tag{5} Si(t+1)={α=1mkαaiαSα′′(t)0if kα=0otherwise(5)

S α ′ ’ ( t + 1 ) = { ∑ j = 1 m a j α k j S j ′ ′ ( t ) i f   k j ≠ 0 0 o t h e r w i s e (6) S_{\alpha}'’ (t+1) = \begin{cases} \sum_{j = 1}^{m} \frac{a_{j\alpha}}{k_j} S_j''(t) & if \ k_j \neq 0 \\ 0 & otherwise \end{cases}\tag{6} Sα(t+1)={j=1mkjajαSj′′(t)0if kj=0otherwise(6)
t t t为奇数且 t ≥ 3 t \geq3 t3 时, S α ′ ′ ( t ) S_{\alpha}'' (t) Sα′′(t) 表示用户 U i U_i Ui(初始值设为1的用户)选择未收藏商品 O α O_{\alpha} Oα的概率。

#在二部图网络上的游走
#第一步游走,从用户到商品
# def bipartite_walk(user_id, perct):
user_id = '23298'
prob = 1
objection_group = ratings_df.groupby(ratings_df[0])  #以用户未依据,对对象进行分类,同一个用户收藏的对象
user_group = ratings_df.groupby(ratings_df[1])    #以对象为依据,对用户进行分类,以对象为依据,同一对象被哪些用户收藏
objection_dict = {}
user_dict = {}

#第一步用户到对象
user_neighbors = objection_group.get_group(user_id)[1].values  #用户的邻居是对象
for objection_id in user_neighbors:
    print(objection_id)
    objection_dict[objection_id] = prob/len(user_neighbors)
    
# #第二步对象到用户
# objection_lis = objection_dict.keys()
for item in objection_dict.items():
    objection_id = item[0]
    prob = item[1]
    objection_neighbors = user_group.get_group(objection_id)[0].values
    for user_id in objection_neighbors:
        try:
            user_dict[user_id] += prob/len(objection_neighbors)
        except KeyError:
            user_dict[user_id] = prob/len(objection_neighbors)
# #         
# #第三步,用户到对象
for item in user_dict.items():
    user_id = item[0]
    prob = item[1]
    user_neighbor = list(objection_group.get_group(user_id)[1].values)
    for obj_id in user_neighbor:
        try:
            objection_dict[obj_id] += prob/len(user_neighbor)
        except KeyError:
            objection_dict[obj_id] = prob/len(user_neighbor)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
objection_dict

3.3 耦合社交网络上的有偏随机游走

耦合网络中,从社交网络中用户与二分图网络中商品游走到二分图网络中的用户
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B4qSkyBd-1571046313642)(https://cdn.nlark.com/yuque/0/2019/svg/503359/1569572289544-94dab1aa-b1b1-4254-bcdf-2fb5546fce04.svg#align=left&display=inline&height=140&name=image.svg&originHeight=140&originWidth=800&search=&size=32395&status=done&width=800)]

S α ( t + 1 ) = { ∑ j = 1 m a j α k j S j ( t ) i f   k j ≠ 0 0 o t h e r w i s e (8) S_{\alpha}(t+1) = \begin{cases} \sum_{j=1}^{m} \frac{a_{j\alpha}}{k_j}S_j(t) & if \ k_j \neq 0 \\ 0 & otherwise \end{cases}\tag{8} Sα(t+1)={j=1mkjajαSj(t)0if kj=0otherwise(8)

初始概率:

  • 对于目标用户 U i U_i Ui S i ′ ′ ( 0 ) = 1 S_i''(0) = 1 Si′′(0)=1
  • 对于其他用户 U U U和商品 α \alpha α S j ( α ) = 0 S_j(\alpha) = 0 Sj(α)=0 S α = 0 S_{\alpha} = 0 Sα=0

t t t 为奇数,且 t ≥ 3 t \geq 3 t3 时, S α ′ ′ ( t ) S_{\alpha}''(t) Sα′′(t)表示用户 U i U_i Ui 选择未收藏商品 O α O_{\alpha} Oα 的概率(设定目标用户的初始值为1单位资源, t = 1 t = 1 t=1 时,资源从目标用户游走到与目标用户相邻对象; t = 2 t = 2 t=2 时,资源从对象再次游走到用户)。

#耦合网络游走,用户23298在耦合网络随机游走,步长为三,转移概率0.7
user_id = '23298'
prob_social = 0.7
step = 3
prob_bi = 1-prob_social
social_user_group = trust_df.groupby(trust_df[0])
#以用户未依据,对对象进行分类,同一个用户收藏的对象
bi_objection_group = ratings_df.groupby(ratings_df[0])  
#以对象为依据,对用户进行分类,以对象为依据,同一对象被哪些用户收藏
bi_user_group = ratings_df.groupby(ratings_df[1])   
objection_dict = {}
user_dict = {}

#第一步用户到对象
user_neighbors = bi_objection_group.get_group(user_id)[1].values  #用户的邻居是对象
for objection_id in user_neighbors:
    objection_dict[objection_id] = prob_social/len(user_neighbors)

for _ in range(int((step-1)/2)) :   
    #第二步,对象到用户    
    for item in objection_dict.items():
        objection_id = item[0]
        prob = item[1]
        objection_neighbors = bi_user_group.get_group(objection_id)[0].values
        for user_id in objection_neighbors:
            try:
                user_dict[user_id] += prob/len(objection_neighbors)
            except KeyError:
                user_dict[user_id] = prob/len(objection_neighbors)


    user_neighbors = list(social_user_group.get_group(user_id)[1].values)
    for user_id in user_neighbors:
        try:
            user_dict[user_id] += prob_social/len(user_neighbors)
        except KeyError:
            user_dict[user_id] = prob_social/len(user_neighbors)


    # #第三步,用户到对象
    for item in user_dict.items():
        user_id = item[0]
        prob = item[1]
        user_neighbor = list(objection_group.get_group(user_id)[1].values)
        for obj_id in user_neighbor:
            try:
                objection_dict[obj_id] += prob/len(user_neighbor)
            except KeyError:
                objection_dict[obj_id] = prob/len(user_neighbor)  
objection_dict

评价指标:

  • P r e c i s i o n Precision Precision 精确度,用户选择的商品在推荐列表中的比例。 p r e c i s i o n i = N r s i / L precision ^i= N_{rs}^i/L precisioni=Nrsi/L

N r s i N_{rs}^i Nrsi:对用户 U i U_i Ui 推荐的商品出现在测试集中的数量, L L L:推荐列表的长度。

  • R e c a l l Recall Recall 召回率,推荐的商品在用户收藏列表中的比例。 r e c a l l i = N r s i / N p i recall^i = N_{rs}^i/N_p^i recalli=Nrsi/Npi
    N p i N_p^i Npi:用户 U i U_i Ui 在测试集中收藏的商品数量
  • F − m e a s u r e = 2 ∗ P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l F-measure = \frac{2*Precision \times Recall}{Precision+Recall} Fmeasure=Precision+Recall2Precision×Recall
  • H D HD HD 汉明距离,衡量用户推荐列表的多样性。 H D i j = 1 − Q i j ( L ) / L HD_{ij} = 1 - Q_{ij}(L)/L HDij=1Qij(L)/L Q i j Q_{ij} Qij 是用户 i i i 与用户 j j j 的推荐列表中具有相同商品的数量。
  • R a n k i n g S c o r e ( r ) Ranking Score(r) RankingScore(r):衡量用户对推荐列表的满意度, r i α = L i α / N i r_{i\alpha} = L_{i\alpha}/N_{i} riα=Liα/Ni L i α L_{i\alpha} Liα 是用户未收藏的商品 α \alpha α 在用户 i i i 推荐列表中的位置。 N i N_i Ni 是推荐列表的长度。

4. 结果分析

4.1 数据描述

Epinions与Friendfeed两个公开数据集均包含一个社交关系数据集和一个评分数据集。下表对数据集对应的网络进行描述。以Epinions为例,文章中随机抽取一部分数据进行分析,采样数据规模为:4066个用户,7649个对象,用户与对象连边(收藏)数量为154122条,社交网络连边数为217017。网络密度为5x10-3 。

Table 1: Properties of the tested data sets
11.jpg

4.2 参数 λ \lambda λ t t t 对实验结果的影响

λ \lambda λ为资源在社交网络与二分图网络中的分配比例, t t t 为游走步长,下图使用排序的分进行衡量,值颜色越偏冷色表示效果越好,图中可以看出在 t = 3 t=3 t=3 时,预测效果较好。 当 λ = 0 \lambda = 0 λ=0 时,预测效果仅依赖于二分图网络,随着 λ \lambda λ 增加,社交网络的信息被逐渐考虑进来。

Figure1:Ranking score values on Epinions and Friendfeed data sets (color online).
Properties-of-the-tested-data-sets.jpg
(a)Epinions (b)Friendfeed

4.3 预测效果

下表展示了预测长度 L = 20 L = 20 L=20 时,该模型与 MD(mass diffusion) 模型和 UCF(user-based CF) 模型的效果比较。

Table2 Algorithmic performance for Epinions data set with recommendation list L =20
Algorithmic-performance-for-Epinions-data-set-with-recommendation-list-i-i-20 (1).png

Table3 Algorithmic performance for Friendfeed data set with recommendation list L =20
Algorithmic-performance-for-Friendfeed-data-set-with-recommendation-list-i-i-20 (1).png

**本项目已在mo平台实现,记得来fork呀:**https://momodel.cn/explore/5d70809e85fab71bf10a556a?type=app

关于我们

Mo(网址:https://momodel.cn)是一个支持 Python 的人工智能在线建模平台,能帮助你快速开发、训练并部署模型。

欢迎关注我们的微信公众号:MomodelAI

同时,欢迎使用 「Mo AI编程」 微信小程序

以及登录官网,了解更多信息

Mo,发现意外,创造可能


Mo 人工智能俱乐部 是由网站的研发与产品设计团队发起、致力于降低人工智能开发与使用门槛的俱乐部。团队具备大数据处理分析、可视化与数据建模经验,已承担多领域智能项目,具备从底层到前端的全线设计开发能力。主要研究方向为大数据管理分析与人工智能技术,并以此来促进数据驱动的科学研究。

目前俱乐部每两周在杭州举办线下论文分享与学术交流。希望能汇聚来自各行各业对人工智能感兴趣的朋友,不断交流共同成长,推动人工智能民主化、应用普及化。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Mo 人工智能技术博客】基于耦合网络的推荐系统 的相关文章

  • 下载 PyQt6 的 Qt Designer 并使用 pyuic6 将 .ui 文件转换为 .py 文件

    如何下载 PyQt6 的 QtDesigner 如果没有适用于 PyQt6 的 QtDesigner 我也可以使用 PyQt5 的 QtDesigner 但是如何将此 ui 文件转换为使用 PyQt6 库而不是 PyQt5 的 py 文件
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 编程笔记:Windows Forms in C#

    1 画线时遇到的奇怪问题 以下摘取部分代码 Graphics g null g CreateGraphics private void Form1 MouseMove object sender MouseEventArgs e 下面三行代
  • 第七章、并发编程实战项目

    一 并发任务执行框架 架构师是什么 在一个软件项目开发过程中 将客户的需求转换为规范的开发计划及文本 并制定这个项目的总体架构 指导整个开发团队完成这个计划的那个人 就是 架构师 一般是一个项目里的最资深的专业技术人员 可以说架构师首先一定
  • 【SDOI2016】数字配对【建立二分图+费用流求方案数】

    题目链接 首先 我们可以看一下这个推导过程 如果 那么 对于 就一定不是质数 一定是它的一个因子 于是可以看出 这一定是一幅二分图 于是 可以根据二分图的性质来确定了每个点的属于S边还是T边了 include
  • 《深入理解mybatis原理》 MyBatis事务管理机制

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net u010349169 article details 37992171 MyBatis作为Java语言的数据库框架 对数据库的事务管理是其非常重要的
  • 在手机端点击input框不弹出输入法的方法

    1 使用CSS样式 input pointer events none 2 使用事件阻止 input onmousedown function e e preventDefault 这样不仅会阻止键盘 同时 input 会失去光标跟随 如果
  • 通俗易懂的LSTM

    目录 一 LSTM的基础知识 1 长依赖的问题 2 LSTM的核心 3 LSTM的门结构 4 LSTM门结构的作用 5 LSTM的变体 GRU 二 LSTM的补充知识 1 LSTM缓解梯度消失的原因 一 LSTM的基础知识 1 长依赖的问题
  • Python OpenCV 解决人脸识别报错cascade.detectMultiScale error

    Authored by Monana Contact me via serena9636 163 com 环境 Python2 7 OpenCV3 1 0 Win 64bit 我想在OpenCV中实现一段如下的很简单的人脸识别代码 这也是在
  • vsCode返回上一步

    vsCode返回上一步 windows Alt 上下左右的左箭头 Linux Ctrl Alt 减号
  • 图像信噪比的理解

    图像的信噪比和图像的清晰度一样 都是衡量图像质量高低的重要指标 图像的信噪比是指视频信号的大小与噪波信号大小的比值 其公式为 S N 信噪比 20 log 信号 噪声 dB 信噪比大 图像画面就干净 看不到什么噪波干扰 表现为 颗粒 和 雪
  • 使用VMware完成KVM虚拟化实验并运行Centos

    本次实验在VMware中的Ubuntu18内安装KVM并运行centos 首先 在VMware下开启虚拟化 更新软件索引 apt get update 安装依赖 apt get install qemu kvm qemu virt mana
  • js验证姓名,包括少数民族名字中的·,后你哦·就两节课了

    姓名验证 u4E00 u9FA5 uf900 ufa2d s 2 20 亲测
  • Outlook VBA自动处理邮件

    需求描述 公司里面每天都会有很多邮件 三分之一都是不需要看的 Outlook的过滤功能不错 都可以处理掉 还有些邮件 根据正文或者附件做一下处理自动转发出去就行了 于是上网搜集了一些资料 写个了小程序 共享一下 以后可以参考 也希望对大家有
  • Linux系列一 VMware 中 Fedora系统的安装与网络配置

    之前一篇文章 简单地总结了自己的Linux假期培训课程 因为自己也打算开始学习Linux 所以就在这里写点东西 记录自己的学习历程 如果也能给大家带去一点帮助的话 甚是欣慰 能力时间有限 难免有疏漏的地方 还希望大家多多批评指正 本篇文章的
  • C++——set 和 multiset

    文章目录 结构 构造 非更易型操作 查找操作 赋值操作 迭代器相关操作 插入和移除操作 自定义排序准则 Set 和 multiset 会根据特定的排序准则 自动将元素排序 两者不同之处在于 multiset 允许元素重复而 set 不允许
  • [bzoj1359][Baltic2009]Candy

    给定N个数对 T i S i 表示时刻 S i 时在位置 T i 处出现一粒糖果 有一些机器人可供使用 每个机器人可花费一单位时间向相邻位置移动 要求用最少的机器人接到全部糖果 时刻0时机器人位置可自行安排 1 leq N leq10000
  • centos断电重启卡在登录前界面的问题解决

    出现这个情况的原因猜测是断电 启动后就卡在登录前界面 只有网络是通的 其他服务貌似都没正常启动 ssh远程终端也连不上 ctrl alt 1 切换到详细信息模式下看到这样的错误 就是文件系统xfs有损坏 查资料都说是需要通过xfs repa
  • c语言编程3*3矩阵的转置

    include
  • 【FreeRTOS】任务通知的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • Java比较两个对象是否相同并获取值不同的属性

    最近项目中要加操作日志 同时要把用户修改了那些字段记录下来 在更新的时候就需要比较之前的数据和现在的数据有哪些不同 这么多类一个一个的比较就太麻烦了 所以打算写一个工具类 主要思想还是通过反射获取类的属性的getter方法 调用getter
  • 【Mo 人工智能技术博客】基于耦合网络的推荐系统

    基于耦合网络的推荐系统 作者 陈东瑞 1 复杂网络基础知识 当我们拿起手机给家人 朋友或者同事拨打电话时 就不知不觉中参与到了社交网络形成的过程中 当我们登上高铁或者飞机时 就可以享受交通网络给我们带来的方便 即使当我们躺在床上什么也不干时