2015-02-06 2 views
0

У меня есть этот код для нейронной сетевой библиотеки Я стройСамый быстрый способ перебора списка/коллекции объектов в Cython?

for connection in self.backwardConnections: 
    self._z += connection.value() 

где connection является cdef class Connection и backwardConnections является питоном list соединений.

У меня есть два вопроса

  1. Какой самый быстрый итерация по списку Python? (Я мог бы также сделать это с типичным for int i in range (len (..)))
  2. Если я откажусь от подхода списка python, какой тип коллекции (например, массив numpy, C++-векторы и т. Д.) Мог бы содержать объекты Connection и повысить производительность?
+0

Вы делаете больше математики с этим списком значений? Если это так, вы можете создать массив «numpy» и работать над этим. например 'Values.sum()'. 'numpy' также имеет быстрый итератор' nditer', который работает в 'cython. – hpaulj

+0

@hpaulj Вещь 'connection.value()' определяется как 'self.weight * self.source.y', где' source' является 'Neuron',' y' и 'weight'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Я в основном строю график сетей, использующих нейроны как узлы и соединения как вершины. На то, что я мог сделать, это иметь 2 cpp-вектора указателей на 'w' и 'y' s, которые можно перебирать со скоростью c. –

ответ

0

Строительство for ... in ...: является самым быстрым способом перебора списка в Python. Вы также не сможете значительно повысить производительность, переключившись на другой тип данных. Эти две вещи уже очень быстры.

Я предполагаю, что вы собираетесь оптимизировать этот код неправильно. Вместо того, чтобы смотреть на механизм циклирования, который, вероятно, занимает незначительную долю вашего времени работы, почему бы не посмотреть на оптимизацию, что делает вызов .value()?

Существует также вероятность того, что Python слишком медленный для того, что вы пытаетесь сделать. Однако такие случаи встречаются довольно редко.

+0

'.value()' на самом деле довольно совершенен. Но подождите, знаете ли вы, что я делаю это в Китоне? (с C). –

Смежные вопросы