array python 交集_模糊数学Python库简介和评测

514254466067f9bea0b93ead98bf197c.png

写在前面

模糊数学是国内外许多工学、管理学研究生以上的选修甚至必修课程。但对于非数学专业而言,掌握模糊数学的各种计算方法、了解各种方法的用途(应用场景)其实要比理解模糊数学的“数学”理论要重要得多。目前在Matlab等数学工具中其实也有相应的模糊数学工具箱(参见:Fuzzy Logic ToolboxFuMatlab Fuzzy Logic工具箱),但这些专业的工具中其实集成的都是比较复杂的方法,比如模糊控制一类。另外以前也有一些学者开发过基于C的工具箱,但对于非计算机、信息类专业而言,C库实在也太麻烦。

相比之下,Python对于绝大多数非计算机、信息类专业的学生和研究人员而言都要简单很多,并且也可以作为长期使用的一门工具语言。

当然,我们很懒!所以就去找了一圈写好的模糊数学库,也就是本文要介绍的这个库-scikit-fuzzy。

一、概览和安装

项目主页:User Guide - skfuzzy v0.2 docs

Github主页:scikit-fuzzy/scikit-fuzzy

在这两个主页上其实看不出什么有价值的内容,需要点进相关的页面才能看清楚。最主要的功能介绍在API documentation 和User Guide上。

主要模块:

  1. Module:cluster :模糊聚类
  2. Module:control:模糊控制
  3. Module:defuzzify:模糊化与去模糊化
  4. Module:filters :模糊滤波
  5. Module:fuzzymath :模糊数学基础内容
  6. Module:image:图象相关内容
  7. Module:`intervals` :区间数与模糊数
  8. Module:membership:模糊隶属度函数
另外,这个库比较不地道的一点是这些模块虽然分开放了,但其实又全部放在总的根目录skfuzzy下。 所有方法都是以函数的形式写的,因此在用的时候只需要全部导入就行。

安装方法与依赖

  • 主要依赖项:
    • NumPy >= 1.6
    • SciPy >= 0.9
    • NetworkX >= 1.9
  • Pip安装:
$ pip install -U scikit-fuzzy

注意:这安装之前一定要检查是否装有Nump和Scipy,至于NetworkX似乎并不一定要用(当然由于我们目前也只用到了5、7、8三个模块)。

2020.11.10注:
另外,安装这个库之前最好更新一下setup_tools。原因也不多说了,只管在安装前运行一次:python -m pip install --upgrade setuptools
如果很久没有更新过pip,那么最好也更新一下:python -m pip install --upgrade pip

对于网速存在问题的同学可以使用本地安装,或者直接拷贝完整代码。相应的方法自行度娘即可。

二、模糊集合的表示方法

模糊数学的研究对象就是模糊集,那么模糊数学的库的操作对象其实也就是模糊集。在我们的模糊数学课程笔记 里介绍过这样的两种表示方法:

f4537b5a7d239a3bd2d393c26cb4b4ba.png

6227b8398aa052cff6a5e1f3be594e2e.png

846efd3873cfa7f969a82ff28bf4a829.png

这两种表示法是最容易在计算机里实现的。而在skfuzzy库里,都是直接用numpyndarray或者list来直接表示的。而通常我们推荐直接使用numpyndarray,因为这样也方便我们对它们进行其它的操作。

三、一些常用方法简单举例

下面我们来举几个例子说明它的用法:

  • 求两个模糊集的交集-- fuzzy_and
from skfuzzy import *# 模糊集的元素
x = np.array([1,2,3])
# 对应元素的隶属度
mf_x = np.array([0.1,0.2,0.3])# 模糊集的元素
y = np.array([1,2,3])
# 对应元素的隶属度
mf_y = np.array([0.1,0.2,0.3])+0.3# 上述两个模糊集的交集
fuzzy_and(x,mf_x,y,mf_y)
Out[22]: (array([1, 2, 3]), array([0.1, 0.2, 0.3]))
  • 求两个模糊集的并集--fuzzy_or
fuzzy_or(x,mf_x,y,mf_y)
Out[24]: (array([1, 2, 3]), array([0.4, 0.5, 0.6]))
  • 区间数的四则运算

我们以笔记 八、模糊数及其运算性质 中的区间数为例:

82126c8a930c66c0ee557a4396939acc.png
# 定义两个区间数。其实就是两个区间,本质上是列表。
I = [1,3]
J = [2,5]# 加
addval(I,J)
Out[27]: array([3, 8])# 减
subval(I,J)
Out[28]: array([-4,  1], dtype=int32)# 乘
multval(I,J)
Out[29]: array([ 2, 15], dtype=int32)# 除
divval(I,J)
Out[30]: array([0.2, 1.5])

对比一下,结果完全一致。

  • 模糊数的四则运算

在我们的笔记 八、模糊数及其运算性质 中提到过,模糊数其实就是一种特殊的模糊集,因此它的表示方法和模糊集其实完全一样。这里我们仍然用笔记中的例子来做一下测试:

8a0356b5eec0920856e7f4fb8593cb55.png

笔记中我们给出了加、减、乘的结果:

73f969a6a58720b3f2e0b3ccacfbe31c.png

ad87e6b2c098edd0cf1c7576e66b1d02.png

实现代码:

# 例子中的模糊数“2”
x = [1,2,3]
mfx = [0.4,1,0.7]# 例子中的模糊数“3”
y = [2,3,4]
mfy = [0.5,1,0.6]# 加
fuzzy_add(x,mfx,y,mfy)
Out[36]: (array([3., 4., 5., 6., 7.]), array([0.4, 0.5, 1. , 0.7, 0.6]))# 减
fuzzy_sub(x,mfx,y,mfy)
Out[37]: (array([-3., -2., -1.,  0.,  1.]), array([0.4, 0.6, 1. , 0.7, 0.5]))# 乘
fuzzy_mult(x,mfx,y,mfy)
Out[38]: 
(array([ 2.,  3.,  4.,  6.,  8.,  9., 12.]),array([0.4, 0.4, 0.5, 1. , 0.6, 0.7, 0.6]))

当然我们还可以算出“除”的结果:

fuzzy_div(x,mfx,y,mfy)
Out[39]: 
(array([0.25      , 0.33333333, 0.5       , 0.66666667, 0.75      ,1.        , 1.5       ]),array([0.4, 0.4, 0.6, 1. , 0.6, 0.7, 0.5]))

注意:这个例子中我们实际上是用list 来表示的模糊数。也就是说,listndarray其实都是支持的。

三、注意事项

1、模糊子集的元素只支持数字

先看例子:

a = ['x1','x2']
b = ['x1','x3']mfa = [0.1,0.2]
mfb = [0.2,0.3]fuzzy_and(a,mfa,b,mfb)
---------------------------------------------------------------------------
UFuncTypeError                            Traceback (most recent call last)
<ipython-input-51-5adc794dbb9c> in <module>
----> 1 fuzzy_and(a,mfa,b,mfb)d:programdataanaconda3envstoolslibsite-packagesskfuzzyfuzzymathfuzzy_logic.py in fuzzy_and(x, mfx, y, mfy)101     """102     # Check if universes are the same
--> 103     return fuzzy_norm(x, mfx, y, mfy, norm=np.fmin)104 105 d:programdataanaconda3envstoolslibsite-packagesskfuzzyfuzzymathfuzzy_logic.py in fuzzy_norm(x, mfx, y, mfy, norm)72 73     if not sameuniverse:
---> 74         z, mfx2, mfy2 = _resampleuniverse(x, mfx, y, mfy)75 76     return z, norm(mfx2, mfy2)d:programdataanaconda3envstoolslibsite-packagesskfuzzyfuzzymathfuzzy_logic.py in _resampleuniverse(x, mfx, y, mfy)14 15     """
---> 16     minstep = np.asarray([np.diff(x).min(), np.diff(y).min()]).min()17 18     mi = min(x.min(), y.min())<__array_function__ internals> in diff(*args, **kwargs)d:programdataanaconda3envstoolslibsite-packagesnumpylibfunction_base.py in diff(a, n, axis, prepend, append)1267     op = not_equal if a.dtype == np.bool_ else subtract1268     for _ in range(n):
-> 1269         a = op(a[slice1], a[slice2])1270 1271     return aUFuncTypeError: ufunc 'subtract' did not contain a loop with signature matching types (dtype('<U2'), dtype('<U2')) -> dtype('<U2')

这个例子里我们试图实现两个模糊子集:

的并集,但直接使用
fuzzy_and就报错了。说明在这个库里,并不支持数字以外的模糊集元素
事实上,在模糊集的基本操作中,还需要模糊集具有shape属性,因此此时如果使用list来表示模糊集就会出问题。这也是我们更加推荐使用ndarray来表示模糊集的重要原因之一。

2、模糊子集基本操作并不完善

仍然以上述两个模糊子集为例

,我们来试试求它们的交和并:
a = np.array([1,2])
b = np.array([2,3])
mfa = np.array([0.1,0.2])
mfb = np.array([0.2,0.3])# 交
fuzzy_and(a,mfa,b,mfb)
Out[64]: (array([1, 2]), array([0.1, 0.2]))# 并
fuzzy_or(a,mfa,b,mfb)
Out[63]: (array([1, 2]), array([0.2, 0.2]))

注意! 模糊子集的交集是对应元素取小,并集则是对应元素取大。但从这个结果上来看,程度并没有将两个子集中的元素 1,2,3认成3个不同的元素,而只是将a,b相同位置的元素认定成了同一个元素,并且是以第一个集合中的元素为主进行操作的。

这一设定显然并不符合模糊数学中对交、并的定义。因此在使用时要小心。

四、总体评价

1功能基本完善。因为我们目前笔记中的内容几乎全部包含。另外还有一些其它主流库中的内容也包含,例如模糊聚类(和基本聚类有所区别)、模糊控制等(不过高端的计算操作目前我们认为并不值得信任)。

2文档可读性算不上好!

比如这里:fuzzy_add是指模糊数的加法,这里说"a,b是两个模糊集",而根据我们刚刚的测试很清楚一点的是:这里的a,b 其实就是元素xy对应的隶属度。它下面对应的fuzzy_and函数就是这样写的。这个库的文档里,表示相同意思的变量被标成不同的符号不同的说明的情况很多! 如果没有充分的模糊数学基础加上一定的经验的话,很容易被迷惑。

711a80f9d3348e409ba95e22e88558e6.png

3、维护不算积极

从它的发布历史来看,库的作者从2016年首次发布这个库,到2019年为止每年下半年更新一次。并且更新的内容也不算太完整。(不过从这个规律来看,感觉这可能是某个上这课的老师开发的。可能刚好每年上完一次,就发现一些问题更新一次)。

综上:

1、这个库总体来说能用,

2、对于不涉及过于复杂的模糊数学的操作而言,也基本够用。

3、有一些小问题,但也不太影响总体的功能性。另外在模糊集的处理上还有待提高,没有对模糊子集这个对象进行单独封装是个很大的问题!

4、目前基于这个库的基本功能,其实可以完整实现我们课程笔记中的所有操作!

所以,这个事儿我们应该会有后续!~ 敬请期待~


关注我们获取更多有趣有用的内容:

270e7b1cbc7171f1f5ab2679a51932f2.png
这个水印一定会越来越深的~

  • 更新2020-11-06:更新模糊动态聚类,关注公粽号:mathit 搜历史消息“模糊动态聚类”即可查阅。

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

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

相关文章

架构设计器_大厂案例:马蜂窝大交通业务监控报警系统架构设计与实现

部门的业务线越来越多&#xff0c;任何一个线上运行的应用&#xff0c;都可能因为各种各样的原因出现问题&#xff1a;比如业务层面&#xff0c;订单量比上周减少了&#xff0c;流量突然下降了&#xff1b;技术层面的问题&#xff0c;系统出现 ERROR &#xff0c;接口响应变慢了…

使用mpvue开发小程序

一、安装node.js 1、在官网中安装nodejs最新版本。地址&#xff1a;https://nodejs.org/en/download/&#xff0c;根据自己环境&#xff0c;进行下载安装。 2、安装完成后&#xff0c;进行nodejs版本及npm版本查看。 打开cmd命令行&#xff0c;输入 node -v 和 npm -v&#…

iOS----------UITextField实现过滤选中状态拼音

2018年上班的第二天&#xff0c;就这样背了一个大锅。我们项目中有一个搜索功能&#xff0c;在这一期的版本中&#xff0c;为了增强优化&#xff0c;去除了过滤空格的请求&#xff0c;这样或许能增加很好的用户体验&#xff0c;恰恰相反&#xff0c;偷鸡不成蚀把米。没想到苹果…

ai电磁组属于什么组_RPA+AI 创新案例挑战赛 2020 【专业组】amp;【校园组】优胜名单来也!...

大赛介绍本次大赛由 RPA 产业推进方阵为指导单位&#xff0c;来也科技为主办单位&#xff0c;面向所有来也科技合作伙伴及深圳地区大学生公开报名征集【专业组】&【校园组】参赛案例。RPA 产业推进方阵是在中国人工智能产业发展联盟指导下&#xff0c;由中国信息通信研究院…

具有Spring Boot和Yeoman的单页Angularjs应用程序

我非常感谢yeoman之类的工具&#xff0c;它们提供了一种非常快速的方法来将不同的javascript库组合在一起成为一个一致的应用程序。 Yeoman提供了UI层&#xff0c;如果您需要开发服务层和静态资产的Web层&#xff0c;则打包的一种好方法是使用Spring Boot 。 我知道有像JHipste…

vue项目封装axios请求

目录&#xff1a; 一&#xff0c;src/utils/request.js import axios from axios import { getToken } from /utils/auth import store from /storeconst service axios.create({baseURL: process.env.VUE_APP_BASE_API,withCredentials: true,timeout: 5000,// headers:{ …

自定义函数_python3基础07函数(自定义)

"pythonic生物人"的第43篇分享。详细介绍python中&#xff1a;自定义函数的构建&#xff1b;参数传递&#xff1b;模块中调用函数。目录0、楔子1、自定义函数格式2、编写函数说明文档3、函数参数函数形参和实参区别位置实参关键字实参默认实参让实参可选传递任意数量…

curl -windows下接口通讯

1&#xff0c;下载curl -----url命令传输工具2&#xff0c;配置curl环境变量3&#xff0c;在cmd环境中使用举例&#xff1a;curl -G http://xxxxxxx.com&#xff1f;参数使用&#xff1a;curl -G "www.baidu.com" 最原始的批量通讯返回可以将通讯命令保存为bat格式文…

sqlserver 存储过程 C#调用 实现从数据库Get数据

在最近的项目中我想建立一个EFDBfirst的模型但是失败了&#xff0c;生成的edmx中没有实体类和表结构&#xff0c;到处需求解决方案&#xff0c;未果。 问题请见&#xff1a;https://q.cnblogs.com/q/102743/ 后来使用本文写的这个方法 /// 1.在sqlserver中建立存储过程 在一个d…

修改jwt过期时间_PostgreSQL如何修改用户过期时间

生产环境中&#xff0c;有时候需要设置一个有时效的临时帐户&#xff0c;供一段时间内&#xff0c;某些需要的使用&#xff0c;过期帐号自己禁用&#xff0c;但有时候因为更多的需求&#xff0c;需要对这种有过期时间的帐号进行延长过期时间&#xff0c;这时候就需要使用命令行…

怎么自定义字体_自定义字体@fontface的常见应用

前言font-face允许网页自带字体&#xff0c;从而消除对用户电脑字体的依赖。基本用法如下&#xff1a;font-face { font-family: "family-name"; /* 字体名 */ src: url("family-name.eot"); /* IE9 */ src: url("family-name.eot?#iefix&q…

vue项目中使用mock(一)

一&#xff0c;安装 npm install mockjs --save-dev npm install json5 --save-dev npm install axios --save 二&#xff0c;每个文件内容 目录&#xff1a; 流程&#xff1a; Home.vue执行getUserInforList() 调用main.js中全局变量$api 调用/utils/api下的getUserInfo…

使用RxJava和Completable并行执行阻止任务

借助RxJava 1.1.1中引入的Completable抽象&#xff0c;如何并行执行阻止“仅副作用”&#xff08;也称为void&#xff09;任务的并行执行变得更加容易。 “ 正如您可能已经注意到&#xff0c;阅读我的博客时&#xff0c;我主要专注于软件Craft.io和自动代码测试。 但是&#x…

javafx 使用_使用JavaFX AnimationTimer

javafx 使用回想一下&#xff0c;给AnimationTimer起个名字可能不是一个好主意&#xff0c;因为它不仅可以用于动画&#xff0c;还可以用于测量fps速率&#xff0c;碰撞检测&#xff0c;模拟步骤&#xff0c;游戏主循环等。实际上&#xff0c;我大部分时间都在看AnimationTimer…

.Net Core 简洁架构事件(这个不完整,待仔细补充)

.Net Core的架构 - 根据微软官方文档 微软给出了.Net Core的架构方法&#xff0c;无论是在web&#xff0c;azure&#xff0c;uwp等等 微软的github地址&#xff1a;https://github.com/dotnet-architecture/eShopOnWeb 转载于:https://www.cnblogs.com/bijinshan/p/8250512.htm…

原理图中如何连线_Altium Designer10绘制原理图

在进行原理图绘制之前,应先将原理图库与PCB库相关联,在原理图绘制完成后,在生成PCB图,如何将原理图库与PCB库相关联?先进入原理图库,如下图所示。双击元器件文件,进行元器件配置。 元器件配置界面如下图所示。选择Add...进行添加对应的PCB库。 选择浏览进行查找相关PCB库…

NetBeans Java EE技巧3:数据库中的RESTful Web服务

许多现代的Web应用程序正朝着使用HTTP使用无状态通信的方向发展。 REST&#xff08;代表性状态转移&#xff09;体系结构样式通常用于设计网络应用程序&#xff0c;而使用Java EE 7&#xff0c;很容易开发用于数据库通信的RESTful后端。 使用简单的POJO&#xff08;普通的Java旧…

参数php_PHP多参数方法的重构

php中文网最新课程每日17点准时技术干货分享假设我们要完成一个保存文章的功能&#xff0c;如果采用函数编程的方式&#xff0c;大概会是下面这个样子&#xff1a;<?php function saveArticle($title, $content, $categoryId){ // ...}?>每个参数代表一个属性&#…

k8s集群部署成功后某个节点突然出现notready状态的问题原因分析和解决办法

文章目录 1、问题描述2、查看node03的日志3、错误原因分析4、解决办法 1、问题描述 k8s集群配置为 一主三个节点&#xff1b;刚开始运行一直正常&#xff1b;某天突然node03主机状态变为notready&#xff0c;问题如下&#xff1a; 在master节点使用&#xff1a; #master节点…

kickstart_具有Java Kickstart的MongoDB

kickstartNoSQL数据库由于其可伸缩性而变得越来越流行。 适当使用时 NoSQL数据库可以提供真正的好处。 MongoDB是使用C 编写的高度可扩展的开源NoSQL数据库。 1.安装MongoDB 您可以按照所使用的操作系统&#xff0c;按照MongoDB官方网站上的说明安装MongoDB&#xff0c;而不会…