更复杂for循环的Python矢量化

更复杂for循环的Python矢量化,python,numpy,vectorization,Python,Numpy,Vectorization,我想将此函数的for循环矢量化,但由于广播错误,我所有的尝试都失败了。。我对矢量化的使用还不熟悉,所以我想你们中的一些人可能有更多的经验,可以帮助我 当我试图将corr\u matr附加到全局字段self.altes\u E时,出现了强制转换错误。我认为这是因为我想为每个frequenz保存corr\u matr,但我不知道如何解决 def phiGCC(self, signal: np.array, TDOA_werte: np.array, __frequency_bins__, alpha

我想将此函数的for循环矢量化,但由于广播错误,我所有的尝试都失败了。。我对矢量化的使用还不熟悉,所以我想你们中的一些人可能有更多的经验,可以帮助我

当我试图将
corr\u matr
附加到全局字段
self.altes\u E
时,出现了强制转换错误。我认为这是因为我想为每个
frequenz
保存
corr\u matr
,但我不知道如何解决

def phiGCC(self, signal: np.array, TDOA_werte: np.array, __frequency_bins__, alpha: float, altes_E) -> float:

    alle_taus = []

    temp_gcc_ergebnisse = np.zeros((len(TDOA_werte), len(__frequency_bins__)))

    for zaehler, frequenz in enumerate(__frequency_bins__):

        x = np.array([signal[0][zaehler], signal[1][zaehler]])

        y = np.conj(x)
        y = y.T

        E = np.outer(x,y)
        E = x[:,None]*y

        if(self.iterator == 1):
            corr_matr = E
        else:
            corr_matr = alpha * self.altes_E[zaehler] + (1 - alpha) * E
        self.altes_E[zaehler] = corr_matr

        max_tau = 0
        Rxx12 = corr_matr[0,1]

        temp_gcc_ergebnisse[:,zaehler] = (Rxx12/abs(Rxx12) * np.exp(-2j * np.pi * TDOA_werte * frequenz)).real

        i = np.argmax(temp_gcc_ergebnisse[:,zaehler])
        max_tau = TDOA_werte[i]

        alle_taus.append(max_tau)


    tau_func = np.mean(temp_gcc_ergebnisse, axis=1)
    maximaler_wert = np.argmax(tau_func)
    return alle_taus[maximaler_wert]

非常感谢您的帮助,谢谢

请提供一个最低限度的工作示例,提供输入,可能是随机数,使用通用变量名,删除复杂方程。删除与问题无关的所有内容。在
signal
中是一个(2,n)数组,那么
x=signal[:,zaehler]
应该可以工作。或者将其从循环中取出并使用
x=signal.copy()
(如果您不更改
x
值,可能甚至不需要副本)。您好,很抱歉,我无法提供数据,因为答案框中的字符太少。但是
信号的形状为(2257)
TDOA\u-werte
信号的形状为(200)
\uuu-frequency\u-bins\uuuu>信号的形状为(257),
altes\E
self。altes\u-E
信号的形状为(257,2,2),并且需要存储
corr\matr
,这取决于
频率值
alpha
是介于0和1之间的浮点数。此函数已经在工作,并且大部分与问题相关,因为它取决于for循环迭代通过的变量。