让我说我有:
c = array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], float)
然后我进行快速傅里叶变换:
r = rfft(c)
生成以下复杂数组:
r = [ 21.+0.j , -3.+5.19615242j , -3.+1.73205081j , -3.+0.j ]
新数组中的元素数量是1/2 * N + 1。 我试图告诉python更改新数组中SPECIFIC元素的值。我想告诉python保留FIRST 50%的元素并将其他元素设置为零,所以相反结果看起来像
r = r = [ 21.+0.j , -3.+5.19615242j , 0 , 0 ]
我该怎么做?
答案 0 :(得分:1)
您可以使用slice notation并将结果扩展到正确的长度:
r = r[:len(r)/2].extend([0] * (len(r) - len(r) / 2))
* syntax只重复指定次数的零元素。
答案 1 :(得分:1)
rfft返回一个numpy数组,有助于轻松操作数组。
c = [1,2,3,4,5,6]
r = rfft(c)
r[r.shape[0]/2:] = 0
r
>> array([21.+0.j, -3.+5.1961j, 0.+0.j , 0.+0.j])
答案 2 :(得分:0)
您可以将列表拆分为一半,然后将零列表附加到与剩余部分相同的长度:
>>> i
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> i[:len(i)/2] + [0]*len(i[len(i)/2:])
[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]