python矩陣操作小例子

2021-08-08 01:49:38 字數 3155 閱讀 7187

**:

因為經常寫for所以感覺有點low而且執行效率不高,慢慢學習改進,這個矩陣操作例子還不錯可以學學。

用python實現矩陣的加法運算和乘法運算,寫幾層for迴圈,實現矩陣加法和乘法並不困難,但關鍵是要足夠簡潔,這個可讓我費了不少腦子。先直接上**吧。

#矩陣表示形式

m = [

[a1, a2, a3],

[a4, a5, a6],

[a7, a8, a9]

]

#矩陣加法

def madd(m1, m2):

if isinstance(m1, (tuple, list)) and isinstance(m2, (tuple, list)):

return [[m+n for m,n in zip(i,j)] for i, j in zip(m1,m2)]

#矩陣乘法

def multi(m1, m2):

if isinstance(m1, (float, int)) and isinstance(m2, (tuple, list)):

return [[m1*i for i in j] for j in m2]

if isinstance(m1, (tuple, list)) and isinstance(m2, (tuple, list)):

return [[sum(map(lambda x: x[0]*x[1], zip(i,j)))

for j in zip(*m2)] for i in m1]

加法和乘法實現都只用了一行**就搞定了,注意,均沒有做嚴格的輸入引數合法性檢查。乘法處理了常數乘矩陣和矩陣乘矩陣兩種情況。

幾個替代for迴圈的關鍵字:

map

(funcname, list)

python的map 函式使得函式能直接以list的每個元素作為引數傳遞到funcname中, 並返回響應的新的list

如下:

def s

q(x):

return

x*x#求x的平方

map(sq, [1,3, 5,7,9]) #[1, 9, 25, 49, 81]

在需要對list中的每個元素做轉換的時候, 會很方便

比如,把list中的每個int 轉換成str

map(str, [23,43,4545,324]) #['23', '43', '4545', '324']
當然, 第二個引數是list, 也可以是tuple或者是set類list結構的, dict 是不行的,不過返回的結果都是list

map(sq, (1,3, 5,7,9)) # tuple [1, 9, 25, 49, 81]

map(sq, set([1,3, 5,3,7,9])) # set [1, 9, 81, 25, 49]

這裡順便說一下, dict的結構是用{}表示的,如

是直觀的key-value形式, 那麼如果{}中的是乙個類list的結構呢, 如:

其實, 這就是set的最終返回形式, 等價於:

那麼, 自然{}有重複值得時候也會去重

#
reduce

(funcname, list)

與map相比 , reduce類似於乙個聚合類的應用方法, 把list中的引數, 依次傳遞給funcname, 每次funcname的引數都是上個funcname 執行結果和下乙個list中的元素, 所以, funcname 的 引數必須是兩個. 從執行過程看, 有點像遞迴

例如: 求range(1, 101)(不包括101)的和,

def

c_sum

(x, y)

: return x + y;

reduce(c_sum, range(1,101)) #5050

filter

(funcname, list)

執行過程依次將list中的元素傳遞到funcname函式中, 根據funcname返回的true或false 保留或丟棄元素

例: 返回某個list中的所有int資料

def

is_int

(x):

if isinstance(x, (int)):

return

true

else:

return

false

filter(is_int, ["yi",2, "3", 4]) #[2, 4]

sorted

( list, [comp_func])

排序方法, 第二個是可選引數, 根據可選引數返回的值, 對結果進行排序,comp_func接受兩個引數(x, y), 最終返回的結果應該是-1.0,1, 如果返回的是-1, 表示xy, 所以, 實際的排序可以自定義

預設是正序排序:

sorted([3,4, 12, 5, 9, 1])  #[1, 3, 4, 5, 9, 12]
如果是需要倒序排列, 自定義方法:

def

m_order

(x, y):

if(x > y):

return

-1elif(x == y):

return

0else:

return

1sorted([3,4, 12, 5, 9, 1], m_order) #[12, 9, 5, 4, 3, 1]

ps: 以上為學習筆記, 如有錯誤, 還望指正

python爬蟲小例子

如下 r.raise for status 的功能是判斷返回的狀態碼,如果狀態碼不是200 如404 則丟擲異常 來檢視user agent屬性。requests庫寫的 預設user agent是 python requests x.xx.x x表示版本號 如果訪問不成功,可嘗試修改 user ag...

Python演算法小例子

累加求和 1 num以內的累計和 可以使用 for迴圈,while迴圈,遞迴 num int input 請輸入num的值 defsum 1 for迴圈 sum 0for x in range num 1 sum x print sum def sum 2 num 遞迴方法 if num 0 ret...

python小例子(三)

1.提高python執行速度的方法 1 使用生成器,節約大量記憶體 2 迴圈 優化,避免過多重複 的執行 3 核心模組使用cpython,pypy等 4 多程序,多執行緒,協程 5 多個if elif判斷,可以把最可能發生的放在前面 2.mysql和redis的區別?redis 記憶體型菲關聯式資料...