【问题标题】:Trying to get Python to concatenate generated column vectors to form a two dimensional array. It's not working试图让 Python 连接生成的列向量以形成二维数组。它不工作
【发布时间】: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
arrays
matrix
fft