numpy中的矩陣和陣列運算

2021-07-25 19:35:20 字數 3684 閱讀 7753

在相關聚類演算法的實現過程中,用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中我...