2
這裏更快速的方法是我的用於劃分兩個矩陣代碼:用於將兩個矩陣在8點小矩陣
def divideM1(X,Y):
n=len(X)
a=[[col for col in row[:len(row)/2]] for row in X[:n/2]]
b=[[col for col in row[len(row)/2:]] for row in X[:n/2]]
c=[[col for col in row[:len(row)/2]] for row in X[n/2:]]
d=[[col for col in row[len(row)/2:]] for row in X[n/2:]]
e=[[col for col in row[:len(row)/2]] for row in Y[:n/2]]
f=[[col for col in row[len(row)/2:]] for row in Y[:n/2]]
g=[[col for col in row[:len(row)/2]] for row in Y[n/2:]]
h=[[col for col in row[len(row)/2:]] for row in Y[n/2:]]
return a,b,c,d,e,f,g,h
def divideM2(X,Y):
n=len(X)
a=[[0 for i in range(n/2)] for j in range(n/2)]
b=[[0 for i in range(n/2)] for j in range(n/2)]
c=[[0 for i in range(n/2)] for j in range(n/2)]
d=[[0 for i in range(n/2)] for j in range(n/2)]
f=[[0 for i in range(n/2)] for j in range(n/2)]
e=[[0 for i in range(n/2)] for j in range(n/2)]
g=[[0 for i in range(n/2)] for j in range(n/2)]
h=[[0 for i in range(n/2)] for j in range(n/2)]
for i in range(n/2):
for j in range(n/2):
a[i][j]=X[i][j]
b[i][j]=X[i][j+n/2]
c[i][j]=X[i+n/2][j]
d[i][j]=X[i+n/2][j+n/2]
e[i][j]=Y[i][j]
f[i][j]=Y[i][j+n/2]
g[i][j]=Y[i+n/2][j]
h[i][j]=Y[i+n/2][j+n/2]
return a,b,c,d,e,f,g,h
如果我使用了time.time()似乎方法2-「divideM2」比方法1快 - 「divideM1」但爲什麼呢? 有沒有更好的方法來劃分?
EDIT1: 有趣的是,當我使用了time.time():
start = time.time()
print("method1")
for i in range(10000):
1>2
divideM2(a1,a1)
end = time.time()
t1=end-start
print t1 ,"m1"
start = time.time()
print("method2")
for j in range(10000):
1>2
divideM1(a2,a2)
end = time.time()
t2= end-start
print t2, "m2"
if t1>t2:
print "method 2 is faster"
else:
print "method 1 is faster"
我總是得到 「方法2是更快」 即使我比較 「divide1」 本身。有人可以解釋這一點嗎?
我的兩個問題是: 1)爲什麼div2快於div1? 2)有沒有更好的方法? – n0unc3
這需要[NumPy](http://www.numpy.org/)! – perigon
爲什麼你重複第二個矩陣的代碼?你可以將一個分成4個矩陣,然後調用這個方法兩次。 – Feodoran