CS231N Assignment1——compute_distances_two_loops()

在這裏插入圖片描述

在上圖的compute_distances_two_loops() 函數中,我們需要實現計算每張測試圖像(如500張)與每張訓練圖像(如5000張)之間的L2距離,並返回一個500*5000的二維數組dists,dists[i,j]是第i張測試圖像與第j張訓練圖像之間的L2距離

我們有L2距離的計算公式如下:
在這裏插入圖片描述
即兩張圖像的L2距離等於他們每個對應像素值之差的平方的累加值開根號

dists[i][j] = np.sqrt(np.sum(np.square(X[i,:] - self.X_train[j,:])))

對上圖的計算語句,我們已知X是一個500 * 3072的數組,存儲了500張32 * 32 * 3的測試圖像
self.X_train是一個5000 * 3072的數組,存儲了5000張32 * 32 * 3的訓練圖像
上述語句是在內層循環中,即已經由i指明瞭一張測試圖像,以及j指明瞭一張訓練圖像,我們用這個語句計算測試圖像i與訓練圖像j之間的L2距離並將計算結果存儲在dists[i,j]中


ArraySlicing

要理解這個語句,我們首先要知道python中的數組切分Array Slicing,符號爲 冒號 :

一維數組中的切分
data[:] 輸出data中所有元素
data[start:end] 輸出data中下標【start,end-1】的元素
若冒號的左邊/右邊沒有指明數字下標,則取各自的界限值,即左邊補0/右邊補(數組長度-1)
又python中的負數下標-x理解爲(長度-x),故有
data[:-1] 爲輸出data中下標【0,(長度 - 1)- 1】的元素

在這裏插入圖片描述

二維數組中的切分
可由一維數組中的切分拓展而得
在這裏插入圖片描述
上圖中

np.sum(data1[0, :] + data2[0, :]) 

所做的事情是((1+9) + (2+8) + (3+7))
由此可見,只要公式中出現了求和符號∑,就可以調用np.sum()函數進行計算

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