Numpy 通過矩陣操作避免for循環 之 [None, :, :]運用

我們知道python中 for 循環的效率是不高的,相比之下,直接運用矩陣向量操作(如點乘)可以讓代碼運行更快。因爲在復現paper時候遇到了這樣的問題,在這裏總結一下我的解決方法。

[None, :, :] 介紹

通過None indexing,可以將一個二維矩陣擴展成一個三維矩陣,算是一種 broadcasting吧。一個大小爲[a, b]的矩陣M,在A=M[None, :, :]操作下,A的大小變爲[1, a, b],就相當於在第一維度下有一個大小爲[a, b]的矩陣。

類似的,還有[:, None, :],[:, :, None]操作。

[a, b]–>[:, None, :]–>[a, 1, b]
[a, b]–>[:, :, None]–>[a, b, 1]

總之,None 的作用就是在相應的位置上增加了一個維度,在這個維度上只有一個元素

具體來看一下一個例子。

import numpy as np
matrix = np.array([[1,2,3],[4,5,6]])
None_1 = matrix[None,:,:]
None_2 = matrix[:,None,:]
None_3 = matrix[:,:,None]	

matrix_T = matrix.T
None_1_T = matrix_T[None,:,:]
None_2_T = matrix_T[:,None,:]
None_3_T = matrix_T[:,:,None]

結果如下
None
在這裏插入圖片描述
通過None Indexing 的操作可以將矩陣分解成幾塊,然後再利用np.sum就可以簡化求和操作了,這一塊下一篇博客會介紹,敬請期待~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章