矩陣計算優化

2021-09-27 13:47:07 字數 2219 閱讀 7746

距離矩陣計算

給定m × n階矩陣x,滿足x = [x 1 , x 2 , … x n ],這裡第i列向量是m維向量。

求n × n矩陣d,使得d ij = ||x i - x j || 2

通過使用向量和矩陣操作,減少迴圈來優化執行時間

import numpy as np

import numpy.linalg as la

import time

x = np.array(

[range(0

,500),

range

(500

,1000)]

)m,n = x.shape

"""方法1:標準方法計算d ij

d[i, j] = numpy.linalg.norm(x[:, i], x[:, j) ** 2

"""t = time.time(

)d = np.zeros(

[n,n]

)# 儲存結果

for i in

range

(n):

for j in

range

(i+1

,n):

d = x[

:,i]

-x[:

,j] d[i,j]

= la.norm(d)**2

# 計算l2範數的平方

d[j,i]

= d[i,j]

print

(time.time(

)-t)

# 3.41

"""方法2:利用dot計算dij

d = x[:, i] - x[:, j] d[i, j] = numpy.dot(d, d)

"""t = time.time(

)d = np.zeros(

[n,n]

)# 儲存結果

for i in

range

(n):

for j in

range

(i+1

,n):

d = x[

:,i]

-x[:

,j] d[i,j]

= np.dot(d,d)

d[j,i]

= d[i,j]

print

(time.time(

)-t)

# 0.95

"""方法3:減少dot呼叫次數

• d ij = (x i - x j ) t (x i - x j ) = x i t x i - 2x i t x j + x j t x j

• g = numpy.dot(x.t, x)

• d ij = g ii - 2g ij + g jj

"""t = time.time(

)d = np.zeros(

[n,n]

)# 儲存結果

g = np.dot(x.t,x)

for i in

range

(n):

for j in

range

(i+1

,n):

d[i,j]

= g[i,i]-2

*g[i,j]

+g[j,j]

d[j,i]

= d[i,j]

print

(time.time(

)-t)

# 0.27

""" 方法4: 利用重複操作替代外部迴圈

• 在方法3的基礎上,將d表達為h + k - 2g

• h ij = g ii , k ij = g jj

• h = numpy.title(np.diag(g), (n, 1))

• k = h t

• d = h + h t - 2g

"""t = time.time(

)d = np.zeros(

[n,n]

)# 儲存結果

g = np.dot(x.t,x)

c = np.diag(g)

h = np.tile(c,

(n,1))

# tile(a,n),功能是將陣列a重複n次

d = h+h.t-2*g

print

(time.time(

)-t)

# 0.005

優化計算相似度矩陣

任務 現有特徵矩陣x r n fx in r x rn f n為樣本個數,f為特徵大小,需要計算相似度矩陣a aa,aij aji a a aij a ji 為第i個樣本和第j個樣本的相似度,利用歐式距離求解兩個樣本間的距離 a ij aji f 1f x if x jf 2 a a sum x x...

GPU計算矩陣相乘(未優化)

include define len 10 define block 10 define thread 32 global void multi 0 int a,int b,int c c id sum int main cudamemcpy a,a,memsize,cudamemcpyhostto...

單應性矩陣Homography計算和優化

單應性矩陣,是用來描述兩個平面之間的變換關係,是乙個3x3的齊次矩陣。圖上的4個綠色的圈,兩兩可以對應,h可以表達第一張圖變換到第二張圖的轉換關係。具體的表示式 aa表示尺度資訊,h1 h9h 1 h 9 h1 h9 表示h hh矩陣,h hh矩陣有8個自由度,h9 1h 9 1 h9 1,所以只需...