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

Trying to get Python to concatenate generated column vectors to form a two dimensional array. It's not working

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

任务:我正在获取 43,200 个单个数据点(整数,但写为小数)并一次对 600 的 "window" 执行快速傅里叶变换,将此 window每次增加 60 个数据点。因此,此变换将输出 600 个傅里叶系数,共 720 次——我最终将得到一个 600 x 720 的矩阵(行、列)。

这些数据点最初包含在一个列表中,经过 FFT 后变成列向量。当我尝试从循环构建 maxtrix 时,问题就来了——取前 600 个点,对它们进行 FFT,然后将它们转储到一个空数组中。取下一个 600,做同样的事情,但现在将这两列加在一起形成两行,然后是三行,然后是四行……等等。我现在已经尝试了几个小时,但无论我尝试什么,我都无法得到它工作 - 它始终输出我的 "final" 矩阵(本来是生成的 600 x 720 的矩阵)与每个生成的 "block".

的尺寸完全相同

我的代码(相关部分):

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 returns 它的参数的串联而没有实际修改它们。要累积串联,您应该将结果分配回 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