我正在用numpy編程一個神經區域,並且對於100 * 100神經元的地圖,我需要管理一個10000 * 10000連接圖。Numpy/Python:Meshgrid除法操作:MemoryError
所以我用meshgrid創建了我的連接圖,我嘗試應用墨西哥帽子功能的改編。在這裏,你可以嘗試下面的代碼:如果你輸入taille = 60
或taille = 70
(神經圖的寬度),它可以工作(在我的PC上,沒關係),但是如果你嘗試taille = 100
,你會得到一個MemoryError。
import numpy as np
def connection_map4(width, se1, se2, K, inh):
x = np.arange(0, width**2, 1)
y = np.arange(0, width**2, 1)
X,Y = np.meshgrid(x, y)
print "Meshgrid cree"
A1 = 1.0 + inh
A2 = inh
# exp(|x-xc|/b + |y-yc|) -> Mexican Hat equation
# 2D/1D transformation relation: i = width.y + x
# ligne = (X/witdh - Y/width)**2
ligne = (X-Y)/width ## empirically, it's the division that doesn't pass.
print "avant carre"
ligne *= ligne
print "ligne"
colonne = (X%width-Y%width)**2
print "colonne"
M1 = A1*np.exp(-( (colonne)/(2*se1**2) + (ligne)/(2*se2**2)))
print "Premiere operation finie"
M2 = -A2*np.exp(-( (colonne)/(2*(K*se1)**2) + (ligne)/(2*(K*se2)**2)))
print "Seconde operation finie"
return(M1+M2)
taille = 100
connection_map4(taille, 7.5, 4.0, 2.0, 2.0)
根據經驗,有些試驗調試後,我已經分居的meshgrid每個操作,並且它似乎是分裂和不通過模。
是否有解決方案使這個部門?我真的不想使用循環並減慢計算速度。
另一種解決方案是使用'Cython'或fortran使用'f2py'將這個函數封裝在C中。這兩個選項都不是特別漂亮,但是它會在內存上更輕,因爲您可以使用循環。 – mgilson