Я хотел бы создать объекты numpy.ndarray
, которые содержат в них комплексные целочисленные значения. NumPy имеет встроенную встроенную поддержку, но только для форматов с плавающей запятой (float
и double
); Например, я могу создать ndarray
с dtype='cfloat'
, но аналогичного dtype='cint16'
не существует. Я хотел бы иметь возможность создавать массивы, содержащие сложные значения, представленные с использованием 8- или 16-разрядных целых чисел.
Я нашел этот почтовый лист с 2007 года, где кто-то спросил о такой поддержке. Единственным обходным решением, которое они рекомендовали, было определение нового dtype
, содержащего пары целых чисел. Кажется, что каждый элемент массива представляет собой набор из двух значений, но не ясно, какую еще работу нужно выполнить, чтобы сделать результирующий тип данных без проблем работать с арифметическими функциями.
Я также рассмотрел другой подход, основанный на регистрации пользовательских типов с NumPy. У меня нет проблем с переходом на C API, чтобы настроить его, если он будет работать хорошо. Тем не менее, документация для структуры дескриптора типа, похоже, предполагает, что поле типа kind
поддерживает только целые числа с подписью/без знака, с плавающей запятой и комплексные числовые типы с плавающей запятой. Непонятно, что я мог бы найти где угодно, пытаясь определить сложный целочисленный тип.
Любые рекомендации относительно подхода, который может работать?
Изменить: Еще одна вещь; любая выбранная мной схема должна поддаваться обертке существующих сложных целочисленных буферов без выполнения копии. То есть, я хотел бы иметь возможность использовать PyArray_SimpleNewFromData()
, чтобы выставить буфер на Python, не создавая первую копию буфера. Буфер будет уже в чередующемся реальном/мнимом формате и будет либо массивом int8_t
, либо int16_t
.