【发布时间】:2023-04-05 10:11:01
【问题描述】:
我是 Python 新手。我以前在 MATLAB 中完成过这项特殊任务,我正在尝试掌握 Python 的语法和特定行为,因为我将来会更多地使用这种语言。
任务:我正在获取 43,200 个单个数据点(整数,但写为小数)并一次在 600 个“窗口”上执行快速傅立叶变换,每次将该窗口移动 60 个数据点。因此,这个变换将输出 600 个傅立叶系数,720 次——我最终会得到一个 600 x 720 的矩阵(行、列)。
这些数据点最初包含在一个列表中,经过 FFT 处理后变成一个列向量。当我尝试从循环构建 maxtrix 时出现问题 - 获取前 600 个点,对它们进行 FFT,然后将它们转储到一个空数组中。取下一个 600,做同样的事情,但是现在将这两列加在一起形成两行,然后是三行,然后是四行……等等。我已经尝试了几个小时,但无论我尝试什么,我都无法得到它工作 - 它始终如一地输出我的“最终”矩阵(即生成的 600 x 720),因为它的尺寸与每个生成的“块”完全相同。
我的代码(相关部分):
for i in range(npoints):
newdata.append(float(newy.readline())) #Read data from file
FFT_out = [] #Initialize empty FFT output array
window_size = 600 #Number of points in data "window"
window_skip = 60 #Number of points window moves across
j = 0 #FFT count variable
for i in range(0, npoints, window_skip):
block = np.fft.fft(newdata[i:i+window_size]) #FFT Computation of "window"
block = block[:, np.newaxis] #turn into column vector (n, 1)
if j == 0:
FFT_out = block
j = 1
else:
np.hstack((FFT_out, block))
j = j + 1
print("Shape of FFT matrix:")
print(np.shape(FFT_out))
print("Number of times FFT completed:")
print(j)
在这一点上,我愿意相信这是我理解 Python 如何处理矩阵或处理数组的一个根本缺陷。我已经尝试阅读它,但我仍然看不出我哪里出错了。任何帮助将不胜感激!
【问题讨论】:
-
...在我发布它的 30 秒内,这是如何被否决的?我认为这是一个真正的问题,我真诚地寻求帮助,并且我自己花了几个小时试图找到解决方案。
-
(我不是反对者)我猜是因为您以某种方式要求解决您的特定问题。在 S.O.你应该问一些可以帮助很多人的事情。我自己一遍又一遍地遇到同样的问题:D非常烦人。
-
尝试将您的问题细分。从 python 部分剥离 DSP。 Python 大师通常不是 DSP 专家...您似乎想添加列向量 vc_n 以与它们形成矩阵 [vc_1, vc_2, vc_3] ?
-
是的,完全正确!我只是不知道我是否在声明我的数组错误,或者在从列表中提取值以形成数组等之间是否存在一些意外。我主要只是包含了 FFT 的东西,以便我的一些上下文问题 - 基本上矩阵中的数字通过函数变为复数,但它保持相同的维度。
-
检查这些答案,它们可能会有所帮助:stackoverflow.com/questions/17428621/… 以及:stackoverflow.com/questions/14741061/…
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:试图让 Python 连接生成的列向量以形成二维数组。它不工作 - Python技术站