我想像下面的示例代码一样访问数组,这很慢。是否可以从 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 也是如此,还是有另一种方法可以加快此操作?
最佳答案
我自己找到了答案。解决方案是使用 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)))
关于python - 按索引访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49716504/