Python mat與array的區別

2021-08-23 14:41:41 字數 1921 閱讀 6822

python中的numpy包是乙個科學計算包,在進行科學計算時多數情況下都會用到這個包,但是其中的array和mat這兩個函式的區別還是要注意。資料的型別很有可能是程式出現bug的乙個難以發現的原因(自身教訓)。

tolist對array和mat的影響,**如下:

import numpy as np

two = [1, 3, 5, 2, 3, 2]

two1 = np.array(two)

print(two) # [1, 3, 5, 2, 3, 2] type:list

print(two1) # [135

232] type:tuple

print(two1.shape) # (6,)

print(two1.tolist()) # [1, 3, 5, 2, 3, 2] type:list

print(len(two1.tolist())) # 6

two2 = np.mat(two)

print(two2) # [[1 3 5 2 3 2]]

type:tuple

print(two2.shape) # (1, 6)

print(two2.tolist()) # [[1, 3, 5, 2, 3, 2]]

type:list

print(len(two2.tolist())) # 1

可以看到array和mat還是有所不同的。

所以在使用命令tolist進行對array轉換後可以轉換成原來的樣子,對mat型別轉換後會和原來有所不同。

對於二維的list,array和mat基本沒有差別:

import numpy as np

two = [[1, 3, 5, 2, 3, 2]]

two1 = np.array(two)

two2 = np.mat(two)

print(two1.tolist()) # [[1, 3, 5, 2, 3, 2]]

two5 = two1.t

two6 = two2.t

y1 = np.dot(two1,two1.t) # [[52]]

y2 = two2*two2 # 矩陣相乘:這個會出錯

y3 = two1*two1 # 陣列相乘:[[ 1 9 25 4 9 4]] 元素對應相乘

y4 = two2*two2.t # 矩陣相乘:[[52]]

y5 = two1*two1.t

# 陣列相乘:

# [[ 1 3 5 2 3 2]

# [ 3 9 15 6 9 6]

# [ 5 15 25 10 15 10]

# [ 2 6 10 4 6 4]

# [ 3 9 15 6 9 6]

# [ 2 6 10 4 6 4]]

##建立乙個m*n的陣列

m=3n=2

matrix = [none]*m

for i in range(len(matrix)):

matrix[i] = [i]*2

t = np.array(matrix)

t1 = t.t

print(t1)

matrix是array的分支,matrix和array在很多時候都是通用的,你用哪乙個都一樣。但這時候,官方建議大家如果兩個可以通用,那就選擇array,因為array更靈活,速度更快,很多人把二維的array也翻譯成矩陣。

但是matrix的優勢就是相對簡單的運算符號,比如兩個矩陣相乘,就是用符號*,但是array相乘不能這麼用,得用方法.dot()

array的優勢就是不僅僅表示二維,還能表示3、4、5…維,而且在大部分python程式裡,array也是更常用的。

Array與ArrayCollection的區別

當array的資料發生變化的時候,用它作為資料來源的控制項不能感知這種變化。例如 myarray.push new value 這時,如果乙個list用它作為dataprovider,list的列表中不會增加新加入的這個值。而當arraycollection的資料發生變化的時候,能夠通知控制項發生變...

Array 類與物件

以上是陣列類array的資料成員,請為它補充以下方法 1 預設建構函式,建立乙個預設大小為10的陣列 2 有引數建構函式,引數為所要建立的陣列的大小 3 拷貝建構函式 4 析構函式 5 input方法,為陣列元素賦值 6 output方法,輸出陣列元素 7 sort方法,給陣列排序 8 insert...

Array與ArrayList的區別

1.array型別的變數在宣告的同時必須進行例項化 至少得初始化陣列的大小 而arraylist可以只是先宣告。2.array只能儲存同構的物件,而arraylist可以儲存異構的物件。同構的物件是指型別相同的物件,若宣告為int的陣列就只能存放整形資料,string只能存放字元型資料,但宣告為ob...