通过索引访问数组

3

我希望能像下面的示例代码一样访问数组,但是这样做速度很慢。是否可以从if_s创建一个向量,并通过该索引访问数组?

def calc(self, length):
    for i in range(int(f_s*length*6)):
        t = i / f_s  
        self.data[i] = (numpy.multiply(sinTable512[int(t*f_carrier)%512], self.Signal[int(t*f_prn)%1023]))

我想代码应该长这样:

我想象中的代码如下:

def calc(self,length):
    t = numpy.arange(0, f_s*length*6, 1/f_s)
    t_sin = t * f_carrier %512
    t_sig = t * f_prn % 1023
    self.data[i] = (numpy.multiply(sinTable512[t_sin], self.Signal[t_sig]))

有没有其他方法可以做类似的事情?我记得向量操作比循环要快得多,至少在MatLab中是这样的,Python也是这样吗?还是有其他方法可以加速这个操作?

1个回答

1
我自己找到了答案。解决方案是使用numpy的take函数。您可以将数组和索引向量传递给函数,它将返回所需的数组。
def calc(self,length):
    t = numpy.arange(0, f_s*length*6, 1/f_s)
    t_sin = t * f_carrier %512
    t_sig = t * f_prn % 1023
    self.data = (numpy.multiply(numpy.take(sinTable512, t_sin), numpy.take(self.Signal, t_sig)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接