我想访问下面示例代码中的数组,这很慢。是否可以从i
ans f_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]))
还有其他方法可以做那样的事吗?根据我的记忆,矢量操作比for循环要快得多,至少在MatLab中,对Python来说是相同的还是有另一种方法来加速这个操作?
答案 0 :(得分: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)))