【发布时间】:2013-10-11 12:36:24
【问题描述】:
我希望能够对这段代码进行矢量化处理:
def sobHypot(rec):
a, b, c = rec.shape
hype = np.ones((a,b,c))
for i in xrange(c):
x=ndimage.sobel(abs(rec[...,i])**2,axis=0, mode='constant')
y=ndimage.sobel(abs(rec[...,i])**2,axis=1, mode='constant')
hype[...,i] = np.hypot(x,y)
hype[...,i] = hype[...,i].mean()
index = hype.argmax()
return index
rec,shape 返回 (1024,1024,20) 的位置
【问题讨论】:
-
矢量化是什么意思?
-
如中,去掉 for 循环
-
即使是原样(没有矢量化),也不要取
abs然后平方它......没有abs的平方应该做同样的事情。此外,只需将其平方一次并保存平方矩阵。这只节省了大约 20% 的时间,所以真正的矢量化当然会更好:P -
我接受了在将其放入循环之前进行平方的建议,但是因为我在这个矩阵中有复杂的值,所以我必须在平方之前做 abs。从数学上讲,这是没有意义的,但是在python中测试它,如果我不取abs然后平方它,复杂的值会留在里面。例如:(2+2j)**2 #prints 8j abs(2+2j) **2 #prints 8
-
我可以,但是,只拿它的腹肌,而不是平方它。索引的答案仍然相同。基本上只是图像中的一个缩放因子。
标签: python python-2.7 numpy scipy