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,一经查实,立即删除!

相关文章

使用Hibernate和Spring设置分布式Infinispan缓存

一个非常典型的设置–需要分布式缓存的spring / hibernate应用程序。 但是事实证明&#xff0c;设置并不是那么简单。 您显然需要缓存。 可以使用EhCache&#xff0c;Hazelcast&#xff0c;Infinispan&#xff0c;memcached&#xff0c;Redis&#xff0c;AWS的Elasticache以及…

Element UI 的使用

官方文档&#xff1a; https://element.eleme.io/#/zh-CN/component/installation 一、普通项目引入相关文件&#xff0c;使用elementui插件&#xff1a; &#xff08;1&#xff09;引入相关文件 &#xff08;2&#xff09;可以直接使用了 vue项目使用elementui 安装 &…

python基础十一之迭代器和生成器

可迭代 内置方法中含有__iter__的数据类型都是可迭代的&#xff0c;只要是可迭代的就可以使用for循环&#xff0c;反之亦然。 print(dir()) # dir()函数可以获取当前数据类型的所有内置方法 返回值是list print(__iter__ in dir([])) # 判断是否含有__iter__内置方法 迭代器…

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

部门的业务线越来越多&#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;由中国信息通信研究院…

GetSystemInfo()

关于“GetSystemInfo()”的详细信息&#xff0c;参考&#xff1a;https://msdn.microsoft.com/en-us/library/windows/desktop/ms724381(vvs.85).aspx Getting Hardware Information 例程&#xff1a;https://msdn.microsoft.com/en-us/library/windows/desktop/ms724423(vvs.8…

具有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、函数参数函数形参和实参区别位置实参关键字实参默认实参让实参可选传递任意数量…

v-for中用elementUI实现分页

html 分页的内容 <el-aside style"width:49%;" v-for"(item, key, index) in AirInfor.slice((currentPage-1) * pagesize, currentPage * pagesize)" :key"index"><p style"margin-bottom: 10px;"><span>区域&a…

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格式文…

centos7建站php_centos7搭建php服务器

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"云服务器 ECS(Elastic Compute Service)是一…

vue项目实现登录(sessionStorage 存储 token)

前提参考&#xff1a;vue项目封装axios 思路&#xff1a; // 1, 前端校验&#xff0c;校验成功后向后台传用户名和密码&#xff08;每次请求接口都要传 token&#xff09; // 2&#xff0c; 后端收到请求&#xff0c;验证用户名和密码&#xff0c;验证成功&#xff0c;生成 to…

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

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

TIBCO BusinessWorks 6和Container Edition与BW5的比较

[本文已于一段时间前发布在TIBCO博客上 。 我还在适当的地方添加了有关BusinessWorks Container Edition&#xff08;BW CE&#xff09;的一些信息。 下面定义的大多数特性对于BW6和BW CE均适用。 TIBCO ActiveMatrix BusinessWorks 6&#xff08;BW6&#xff09;是一个现代化…

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

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

vue使用echarts图表

https://www.jianshu.com/p/2894b781063b 1、安装 npm install echarts // npm install echarts --save2、引入 echarts import * as echarts from echarts;3、写一个div容器用来承载图表: <div id"teamLeader"></div>4、写一个方法&#xff0c;&am…

云计算入门

根据美国国家标准与技术研究院定义&#xff1a;云计算是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、按需的网络访问&#xff0c; 进入可配置的计算资源共享池&#xff08;资源包括网络&#xff0c;服务器&#xff0c;存储&#xff0c;应用软件&#xff0c…