Доступ к массивам по индексу

avatar
Patrick
8 апреля 2018 в 09:38
73
1
3

Я хочу получить доступ к массивам, как в приведенном ниже примере кода, это довольно медленно. Можно ли создать вектор из i и 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 или есть другой способ ускорить эту операцию?

Источник

Ответы (1)

avatar
Patrick
8 апреля 2018 в 12:23
1

Я сам нашел ответ. Решение состоит в том, чтобы использовать функцию взятия numpy. Вы можете передать массив и вектор индексов в функцию, и она вернет нужные массивы.

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