多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > numpy中的matrix和array

numpy中的matrix和array

來源:程序員人生   發布時間:2015-08-26 07:57:21 閱讀次數:3867次

Preface

在相干聚類算法的實現進程中,用python語言實現,會常常出現array和matrix的混淆,這里做個總結。

array數組

numpy中最基本(默許)的類型是array,他的相干操作都是按元素操作的即用作數值計算當中(按元素操作有+,-,,/,*等)。相乘舉例:

from numpy import * >>> a=array([1,2]) >>> a array([1, 2]) >>> b=array([2,3]) >>> b array([2, 3]) >>> c=a*b >>> c array([2, 6]) >>> dot(a,b) 8

兩個array的相乘*指的是對應元素的相乘;兩個array的dot表示矩陣的相乘。

  • 若a是array,則a.T表示轉置。
  • 把array轉換為matrix用asmatrix()

  • 多數numpy函數返回的是array類型,不是matrix類型。

matrix矩陣

在numpy中的特殊類型,是作為array的子類出現,所以繼承了array的所有特性并且有自己的特殊的地方,專門用來處理線性代數操作(*表示矩陣的相乘,但是對兩個matrix的除/則表示對應元素的相除。)。乘法舉例如:

>>> m=mat([2,3]) >>> m matrix([[2, 3]]) >>> n=([1,2]) >>> n [1, 2] >>> p=m*n Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:Python27libsite-packages umpymatrixlibdefmatrix.py", line 341, i n __mul__ return N.dot(self, asmatrix(other)) ValueError: objects are not aligned >>> dot(m,n) matrix([[8]]) >>> multiply(m,n) matrix([[2,6]])

* 兩個matrix相乘毛病緣由是m的列不等于n的行,也即不對齊(aligned),若對齊了,則是對應元素的相乘,返回1個matrix;兩個matrix的表示是兩個矩陣的相乘。兩個matrix的dot表示矩陣相乘。兩個matrix的multiply表示對應元素的相乘。*

  • matrix中.H,.A,.I表示共軛,轉置,逆矩陣。
  • 把matrix轉換為array用asarray()
  • asanyarray()根據和你的輸入的類型保持1致。

array和matrix的1個很難理解的點

這里會觸及到rank的概念,在線性代數(math)rank表示秩,但是必須明確的是在numpy里rank不是表示秩的概念,是表示維數的概念,這個理解的話需要看此文章:對多維arrays的數據結構解釋:
多維arrays數據結構理解

這里暫時理解為秩,雖然這樣理解是毛病的,但是可以說的通1些事情。(在實際的array和matrix里,英文里介紹的關于rank就用線性代數的秩來理解,但是英文會出現dimensions等于多少等,要求matrix的dimesions必須為2,這里其實指的就是秩,dimensions才是在numpy里的真實的理解情勢)

array要求秩為1(N*1,1*N等)或大于2
matrix要求秩必須為2(rank必須為2)

  • 下面是關于ndim和size的理解:
>>> a array([1, 2]) >>> b array([[1, 2], [2, 3]]) >>> c matrix([[1, 2, 3, 4], [2, 3, 4, 5]]) >>> d array([[1, 2, 3, 4], [2, 3, 4, 5]]) >>> e matrix([[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]) >>> a.size 2 >>> a.ndim 1 >>> b.size 4 >>> b.ndim 2 >>> c.size 8 >>> c.ndim 2 >>> d.size 8 >>> d.ndim 2 >>> e.ndim 2 >>>e.size 12

這里ndim就是求的是rank,所以會發現matrix的都是2,但是array的就會存在差異,需要計算等。size返回的是元素的個數

  • 關于dim, shape, rank, dimension and axis in numpy的細節的問題理解:

stackoverflow地址

補充

如何讓

 M = matrix([[1], [2], [3], [4]])
 如何轉變成
 array([1, 2, 3, 4])

比較優雅的辦法:

>>> x=matrix(arange(12).reshape((3,4)))
>>> x
matrix([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
>>> x.getA1()
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

總結

在應用中,還是用array好點,array的唯1缺點就是在表示矩陣的相乘時候,要用dot,而不是*。

關于numpy里的array和matrix的其余的操作函數,另見wiki地址:http://wiki.scipy.org/NumPy_for_Matlab_Users

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产一区二区福利久久 | 羞羞网站在线播放 | 免费区欧美一级毛片精品 | 欧美 日韩 亚洲 中文字幕 一区 | 欧美日韩精品 | 亚洲精品成人中文网 | 久久精品在这里 | 黄色片xxxxx| 在线观看亚洲欧美 | 国产中文字幕视频在线观看 | 国产码欧美日韩高清综合一区 | 国产成人在线免费视频 | 国产精品免费视频一区二区 | 亚洲第九十七页 | 国产成人久久 | 国产精品久久久久久吹潮 | 日本免费网站视频www区 | 亚洲国产视频在线观看 | 成人ab片 | 欧美操片在线观看 | 欧美黑人巨大最猛性xxxxx | 最近更新中文字幕4 | 亚洲区小说区激情区图片区 | 精品久久久久久中文字幕一区 | 国产成人精品男人免费 | 久久99热成人精品国产 | 视频一区二区精品的福利 | 欧美三级欧美一级 | 欧美人与黑人交 | 亚洲图片自拍偷拍 | 成人小视频在线免费观看 | 亚洲精品一区二区三区五区 | 在线观看国产福利 | 片在线观看免费观看视频 | 久久久久久一级毛片免费无遮挡 | 欧美xxxx做受欧美 | 宇都宫紫苑在线播放 | 国产校园春色 | 亚洲欧美日本综合 | 中文字幕一区二区三区乱码aⅴ | 亚洲福利一区二区三区 |