日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/2 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 array python 交集_模糊数学Python库简介和评测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面

模糊數學是國內外許多工學、管理學研究生以上的選修甚至必修課程。但對于非數學專業而言,掌握模糊數學的各種計算方法、了解各種方法的用途(應用場景)其實要比理解模糊數學的“數學”理論要重要得多。目前在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上。

主要模塊:

  • Module:cluster :模糊聚類
  • Module:control:模糊控制
  • Module:defuzzify:模糊化與去模糊化
  • Module:filters :模糊濾波
  • Module:fuzzymath :模糊數學基礎內容
  • Module:image:圖象相關內容
  • Module:`intervals` :區間數與模糊數
  • 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

    對于網速存在問題的同學可以使用本地安裝,或者直接拷貝完整代碼。相應的方法自行度娘即可。

    二、模糊集合的表示方法

    模糊數學的研究對象就是模糊集,那么模糊數學的庫的操作對象其實也就是模糊集。在我們的模糊數學課程筆記 里介紹過這樣的兩種表示方法:

    這兩種表示法是最容易在計算機里實現的。而在skfuzzy庫里,都是直接用numpy的ndarray或者list來直接表示的。而通常我們推薦直接使用numpy的ndarray,因為這樣也方便我們對它們進行其它的操作。

    三、一些常用方法簡單舉例

    下面我們來舉幾個例子說明它的用法:

    • 求兩個模糊集的交集-- 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]))
    • 區間數的四則運算

    我們以筆記 八、模糊數及其運算性質 中的區間數為例:

    # 定義兩個區間數。其實就是兩個區間,本質上是列表。 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])

    對比一下,結果完全一致。

    • 模糊數的四則運算

    在我們的筆記 八、模糊數及其運算性質 中提到過,模糊數其實就是一種特殊的模糊集,因此它的表示方法和模糊集其實完全一樣。這里我們仍然用筆記中的例子來做一下測試:

    筆記中我們給出了加、減、乘的結果:

    實現代碼:

    # 例子中的模糊數“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 來表示的模糊數。也就是說,list和ndarray其實都是支持的。

    三、注意事項

    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 其實就是元素x和y對應的隸屬度。它下面對應的fuzzy_and函數就是這樣寫的。這個庫的文檔里,表示相同意思的變量被標成不同的符號和不同的說明的情況很多! 如果沒有充分的模糊數學基礎加上一定的經驗的話,很容易被迷惑。

    3、維護不算積極

    從它的發布歷史來看,庫的作者從2016年首次發布這個庫,到2019年為止每年下半年更新一次。并且更新的內容也不算太完整。(不過從這個規律來看,感覺這可能是某個上這課的老師開發的。可能剛好每年上完一次,就發現一些問題更新一次)。

    綜上:

    1、這個庫總體來說能用,

    2、對于不涉及過于復雜的模糊數學的操作而言,也基本夠用。

    3、有一些小問題,但也不太影響總體的功能性。另外在模糊集的處理上還有待提高,沒有對模糊子集這個對象進行單獨封裝是個很大的問題!

    4、目前基于這個庫的基本功能,其實可以完整實現我們課程筆記中的所有操作!

    所以,這個事兒我們應該會有后續!~ 敬請期待~


    關注我們獲取更多有趣有用的內容:

    這個水印一定會越來越深的~
    • 更新2020-11-06:更新模糊動態聚類,關注公粽號:mathit 搜歷史消息“模糊動態聚類”即可查閱。

    總結

    以上是生活随笔為你收集整理的array python 交集_模糊数学Python库简介和评测的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。