在相關聚類演算法的實現過程中,用python語言實現,會經常出現array和matrix的混淆,這裡做個總結。
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表示矩陣的相乘。
在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
"", line 1,
in<
module
>
file
"c:\python27\lib\site-packages\numpy\matrixlib\defmatrix.py"
, line
341, i
n __mul__
return
n.dot(self, asmatrix(other))
valueerror: objects are
notaligned
>>> dot(m,n)
matrix(
[[8]]
) >>> multiply(m,n)
matrix(
[[2,6]]
)
**兩個
matrix
相乘*錯誤原因是
m的列不等於
n的行,也即不對齊(
aligned
),若對齊了,則是對應元素的相乘,返回乙個
matrix
;兩個matrix
的*表示是兩個矩陣的相乘。兩個
matrix
的dot
表示矩陣相乘。兩個
matrix
的multiply
表示對應元素的相乘。**
-matrix中.h
,.a,.i
表示共軛,轉置,逆矩陣。-把
matrix
轉換為array
用asarray()-
asanyarray
()根據和你的輸入的型別保持一致。
## array和matrix的乙個很難理解的點 ##
這裡會涉及到
rank
math
)rank
表示秩,但是必須明確的是在
numpy
裡rank
不是表示秩的概念,是表示維數的概念,這個理解的話需要看此文章:對於多維
arrays
的資料結構解釋:[多維
arrays
資料結構理解][1
]這裡暫時理解為秩,雖然這樣理解是錯誤的,但是可以說的通一些事情。(在實際的
array
和matrix
裡,英文裡介紹的關於
rank
就用線性代數的秩來理解,但是英文會出現
dimensions
等於多少等,要求
matrix
的dimesions
必須為2
,這裡其實指的就是秩,
dimensions
才是在numpy
裡的真實的理解形式)
array
要求秩為1(
n*1,
1*n等)或者大於
2matrix
要求秩必須為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
andaxis
innumpy
的細節的問題理解:
[stackoverflow
位址][2]
## 補充 ##
如何讓
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的唯一缺陷就是在表示矩陣的相乘時候,要用dot,而不是*。
numpy中的matrix和array
Numpy 中的矩陣運算
array list 建立矩陣或者高維向量,例如有 a array 1,2,3 2,3,4 傳入的引數也可是元組。min方法 a.min 0 取每列的最小值,返回乙個陣列 array 1,2,3 a.min 1 取每行的最小值,返回乙個陣列 array 1,2 a.min 得到矩陣中所有元素的最小值...
numpy 陣列 矩陣乘法運算
為了區分三種乘法運算的規則,具體分析如下 import numpy as np函式作用 陣列和矩陣對應位置相乘,輸出與相乘陣列 矩陣的大小一致 1.1陣列場景 a np.arange 1,5 reshape 2,2 aarray 1,2 3,4 b np.arange 0,4 reshape 2,2...
Python中的Numpy 矩陣運算
目錄 在學習線性代數時我們所接觸的矩陣之間的乘法是矩陣的叉乘,有這樣乙個前提 若矩陣a是m n階的,b是p q階的矩陣,ab能相乘,首先得滿足 n p,即a的程式設計客棧列數要等於b的行數。運算的方法如下圖 當時學線性代數時老師教的更為直觀記法 點乘則是這樣 假如有a,b兩個矩陣,在matlab中我...