用 NumPy 求正弦谐波的总和
Posted
技术标签:
【中文标题】用 NumPy 求正弦谐波的总和【英文标题】:Find the sum of sinusoidal harmonics with NumPy 【发布时间】:2022-01-13 07:58:11 【问题描述】:我有以下公式来计算 Z^2 值。我的 t(time) 和 v(pulse frequency) 都是长度相同的 NumPy 数组,而 n(harmonics) 是 1 到 3 之间的整数值,N 是单个整数值。
在下面,您看到了我的幼稚尝试,但无法弄清楚如何准确地包含谐波和所有内容:
phase = t*v
zstat = (2/N)*np.sum(np.sum(np.cos(phase))**2 + np.sum(np.sin(phase))**2)
我需要遍历所有频率以找到最高的 Z,所以我尝试了这个:
for f in frequencies:
phase = timenp * frequencies
zstat += (np.sum(np.cos(k*phase[:N]))**2 + np.sum(np.sin(k*phase[:N]))**2)
zstat = zstat * 2/N
但是,我收到此错误:
ValueError: operands could not be broadcast together with shapes
(28005,) (400,)
代码有什么问题,我该如何解决?
【问题讨论】:
既然 v 是向量而 t_j 是标量,不应该是 phi_j = v_j * t_j 吗? 【参考方案1】:我认为你可以解决你的问题:
通过使用 phase[:N] 将其从第一个元素求和到 N 个元素。 通过在 k 上使用 for 循环而不是您的第一个 np.sum()。看起来像
for k in [1,2,3]:
zstat += (np.sum(np.cos(k*phase[:N]))**2 + np.sum(np.sin(k*phase[:N]))**2)
zstat = zstat * 2/N
注意,也许它可以优化,如果你可以避免计算 cos(phase[:N]) k-time 更好。
【讨论】:
谢谢。我刚刚编辑了我的问题。我需要迭代频率,但我收到上面的错误。是否也可以迭代频率? @SaraKrauss 您能否提供一个完整的示例,以便其他人(和我)可以测试代码?以一小组数据为例。看起来您的数据由于某种原因没有相同的形状。编辑:你的错误可能是因为你做的相位 = timenp * 频率而不是相位 = timenp * f @SaraKrauss zstat 也不在 for 循环中。所以...这有点令人困惑!以上是关于用 NumPy 求正弦谐波的总和的主要内容,如果未能解决你的问题,请参考以下文章
Python:2D Numpy 数组(矩阵) - 求负数之和(行)