我每分钟在一个月内研究太阳频率。所以我有一个矩阵M,有43200个元素,每分钟一个。
为所有元素执行功率谱的方法是:
import numpy as np
import pylab as pl
from scipy import fftpack
M=np.loadtxt('GOLF-SOHO-Sol.dat')
N=len(M)
dt=1
t= np.arange(0., N, dt)
yt = M
frecs= fftpack.fftfreq(yt.size, dt)
fft_yt = fftpack.fft(yt)
vector_amp = np.abs(fft_yt)
pl.subplot(212)
pl.xlim(-0.5, 0.5)
pl.plot(frecs, vector_amp, color="blue", linestyle="-", linewidth=1.5)
pl.xlabel('Frecuencia (Hz)')
pl.ylabel('Espec. amplitud')
pl.title('Espectro de amplitud')
marcasx = np.arange(-0.5, 0.5, 0.1) # vector de marcas en x
pl.xticks(marcasx)
pl.show()
问题是现在我想在这个矩阵中做一些削减。我每12小时只需要一次数据(晴天时)。所以在我的矩阵M中我需要例如前720个相同但是nexts 720必须是0,nexts 720是原件而nexts 720是零等等。
我该如何计算?我应该做一个bucle,其中每720个日期都会改变。
提前谢谢你。我希望我很清楚。
答案 0 :(得分:1)
# your data values (all ones for illustration)
>>> values = numpy.ones( (43200,) )
# reshape to matrix with rows of 720 samples
>>> mat = values.reshape( (60, 720) )
# now it's easy to set alternating rows to 0.0
>>> mat[1::2, :] = 0
# and because y is a view of your data, "values" now
# has zeroes in the right places
>>> values[710:730]
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0.])