Slice是一个强大的访问索引,可用于数组中的元素 numpy的。该解决方案是最有效的解决方案之一。图像是 最初用零创建,然后用偶数行填充 然后在奇数行上,始终每两个像素扫描一次图像。
使用切片实现isccsym函数并处理复杂数组。 请记住,测试一半数组就足够了,因为如果
F(a)==F(-a)
,无需再次将F(-a)
与F(a)
进行比较。
def isccsym(F):
G = np.copy(F)
G[0,0] = np.conjugate(F[0,0])
G[0,1:] = np.conjugate(F[0,:0:-1])
G[1:,0] = np.conjugate(F[:0:-1,0])
G[1:,1:] = np.conjugate(F[1:,1:][::-1,::-1])
if G.dtype == np.complex:
Gaux = np.sum(([G.imag]))
return (abs(F-G)< 10E-4).all()
有人能帮助我吗?我需要进一步缩短处理时间。
答案 0 :(得分:0)
可以一次生成整个G
矩阵,而不是按部件构建它。这应该至少可以加快你的操作速度。此外,Gaux的计算不用于任何事情,因此可以删除,导致:
def isccsym(F):
G = F.conj().T
return (abs(F-G) < 10E-4).all()
但是,此实现不使用切片。
对于使用切片的解决方案,只检查相关元素,根据给定的提示,可以这样做:
def isccsym(F):
row, col = F.shape
sym = (row == col)
while sym and row > 0:
row -= 1
sym = (abs(F[row, row:] - F[row:, row].conj()) < 10e-4).all()
return sym