将数组元素设置为零

1 投票
3 回答
719 浏览
提问于 2025-04-18 00:06

假设我有:

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 修改新数组中特定元素的值。我想让 Python 保留前 50% 的元素,把其他的元素设置为零,所以结果应该看起来像这样:

r =     r = [ 21.+0.j ,  -3.+5.19615242j , 0 , 0 ]

我该怎么做呢?

3 个回答

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]
1

你可以使用切片语法,并把结果扩展到正确的长度:

r = r[:len(r)/2].extend([0] * (len(r) - len(r)  / 2))

这里的* 语法只是把第一个元素重复指定的次数。

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])

撰写回答