尝试让 Python 连接生成的列向量以形成二维数组。它不起作用



我是Python新手。我以前在MATLAB中做过这个特殊的任务,我试图掌握Python的语法和特定行为,因为我将来会更多地使用这种语言。

任务:我正在取43,200个单数据点(整数,但写成小数),并在一次600的"窗口"上执行快速傅里叶变换,每次将该窗口移动60个数据点。因此,这个变换将输出600个傅立叶系数,720乘以-我将得到一个600 × 720的矩阵(行,列)

这些数据点最初包含在一个列表中,并在FFT后转换为列向量。当我尝试从循环中构建矩阵时,问题就出现了——取前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如何处理矩阵或处理数组的理解中的一个根本性缺陷。我试着读了一下,但我仍然看不出我错在哪里。任何帮助将非常感激!

首先要注意的是,Python使用缩进来形成块,所以正如发布的那样,你只会给FFT_out赋值一次,而不会实际调用np.hstack

然后假设这实际上只是发布问题时的剪切和粘贴问题,您应该注意到hstack返回其参数的串联而无需实际修改它们。要累积连接,您应该将结果赋值回FFT_out:

FFT_out = np.hstack((FFT_out, block))

你应该能够得到一个600 x 720矩阵:

for i in range(0, npoints, window_skip):
    block = np.fft.fft(newdata[i:i+window_size])
    block = block[:, np.newaxis]                    #turn into column vector (n, 1)
    if j == 0:
        FFT_out = block
        j = 1
    else:
        FFT_out = np.hstack((FFT_out, block))
        j = j + 1