更复杂for循环的Python矢量化
我想将此函数的for循环矢量化,但由于广播错误,我所有的尝试都失败了。。我对矢量化的使用还不熟悉,所以我想你们中的一些人可能有更多的经验,可以帮助我 当我试图将更复杂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
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循环迭代通过的变量。