1. 程式人生 > >Python Numpy的一些操作可以極大的加快你的code執行速度

Python Numpy的一些操作可以極大的加快你的code執行速度

如果你在進行大矩陣運算的時候,想必大家最想用的肯定是python的numpy資料格式把。但是以前的我,只會用for迴圈(反正只要達到目的),但是當你有個幾十w行的feature,每個有幾千維的時候,那真是要處理無數無數無數無數天啊!!!於是,經導師的一番“刺激”後,小肚決定用:矩陣運算大發提高運算速率。效果顯著!能提高180倍。So,我之前是幹嘛了?[微博狗的表情]

—————–踩坑無數,總結了這篇系統的文章,如果喜歡,歡迎大家瀏覽—————

1. 最大最小值

np.max(X, axis=0)   #每一列的最大值
np.min(X, axis=0)   #每一列的最小值
np.max(X, axis=1
) #每一行的最大值 np.min(X, axis=1) #每一行的最小值 ######從這裡總結出,axis=0是對列的處理,axis=1是對行的處理,預設時時對所有的元素進行最大最小值求取。對以後的函式也是這樣的####

2. 改變numpy的行列數目

X.reshape((m,n))   #將X變成m行n列的矩陣。但是X.shape[0]*X.shape[1] = m*n (針對二維陣列而言,其他的也要保證重塑後元素的個數不會改變)

3. 複製numpy的行或者列

X.repeat(m, axis=0) #將X按列進行復制m行。即如果X是(x1, y1),則複製後變為(x1*m, y1)。即把(x1, y1)複製m遍“放在下面”。
X.repeat
(m, axis=1) #將X按行進行復制m列。即如果X是(x1, y1),則複製後變為(x1, y1*m)。即把(x1, y1)複製m遍“放在右邊”。 #axis預設時時將X的每一個元素複製m次,並按照“先行後列”的順序拉為1維。 e.g. a = np.array([[1,2,3],[4,5,6]]) a.repeat(2) = array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6])

4. numpy轉置

X.transpose()

5. L2 L1norm

np.linalg.norm(X, ord=1, axis=1) #ord=1表示是L1 norm,ord=2表示是L2norm,axis=1表示是對行進行norm,axis=0表示是對列進行norm,預設時對所有的進行norm。

6. 求均值和方差,標準差

np.mean(X, axis=1) #axis=1表示是對行進行求均值,axis=0表示是對列進行求均值,預設時對所有的元素求均值。
np.std(X, axis=1) #axis=1表示是對行進行標準差求取,axis=0表示是對列進行標準差求取,預設時對所有的元素求均值。
np.var(X, axis=1) #axis=1表示是對行進行方差求取,axis=0表示是對列進行方差求取,預設時對所有的元素求均值。

7. 求內積

np.dot(X, Y) #其中X=(m,n), Y=(n,z)必須保證X的列數和Y的行數相同

8. 判斷元素在不在numpy中

if num in X:    #num是不是在X中
if num in X[1,0:5]:    #num是不是在X的第一列的前5個元素中

9. numpy排序
由於我的目的就是將每一行中的元素分別按照從大到小的順序排序,所以我用第二個函式就好。這裡不細講其他的排序方法,詳情請見我參考的部落格

np.argsort(X, axis=1) #對X的每一行中的元素“分別”進行排序,返回的是從小到大的元素的位置資訊。axis=0時是對X的每一列中的元素“分別”進行排序,預設時axis=1
np.argsort(-X, axis=1) #返回的是從大到小的元素的位置資訊。