Эффективный тип данных Python (список или массив NumPy?) - PullRequest
1 голос
/ 05 июля 2011

Я все еще не понимаю, использовать ли список или массив numpy.
Я начал с последнего, но так как мне пришлось много добавлять, я закончил с множеством vstacks, замедляющих мой код.
Использованиеlist решит эту проблему, но мне также нужно удалить элементы, которые снова хорошо работают с delete в массиве numpy.

Как теперь выглядит, мне придется написать свой собственный тип данных (на скомпилированном языке, изаворачивать).Мне просто любопытно, если нет способа выполнить работу с использованием типа Python.

Чтобы подвести итог, это критерии, которым должен соответствовать мой тип данных:

  • 2d n (переменных) строк, каждая строка k (фиксированных) элементов
  • в памяти в виде одного куска (было бы неплохо для эффективной работы)
  • добавляемая строка (со средним постоянным временем,как вектор C ++, просто всегда k элементов)
  • удалить набор элементов (лучше всего: на месте, оставить свободное место в конце для последующего добавления)
  • элемент доступа с учетом индекса строки и столбца (O(1) как данные [строка * k + столбец]

Мне кажется, как правило, полезно иметь такой тип данных и его невозможно реализовать в C / Fortran.
Что будетближе всего к Python? (или, может быть, как вы думаете, будет ли полезно написать класс Python для типа данных? какую производительность следует ожидать в этом случае?)

1 Ответ

1 голос
/ 05 июля 2011

Как я понимаю, если бы вы делали это на C или Fortran, вам нужно было бы иметь представление о размере массива, чтобы вы могли выделить правильный объем памяти (игнорируя realloc!).Итак, если вы знаете это, зачем вам добавлять к массиву?

В любом случае у numpy массивов есть метод resize, который можно использовать для увеличения размера массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...