改进切片函数(numpy)

时间:2017-05-18 04:38:26

标签: python arrays numpy

  

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()

有人能帮助我吗?我需要进一步缩短处理时间。

1 个答案:

答案 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