Numpy форма и беспорядок типа - PullRequest
0 голосов
/ 25 октября 2019

Я не понимаю, как работает numpy dtype для массивов смешанного типа. Особенно связь между пользовательским dtype и формой кажется несовместимой.

Я пытаюсь преобразовать пользовательский объект Matrix, который имеет свои необработанные данные в виде list [list], и некоторые дополнительные метаданные, такие как тип столбца и заголовки строк. Чтобы привести его к массиву numpy, я использую следующий шаблон:m - матрица: список [список]ch - заголовок столбца: strct - тип столбца: тип numpy

numpy.array (m, dtype = [(ch1, ct1), (ch2, ct2)])

Я уже попробовал все возможные конструкторы dtype без успеха, вотрасхождения, которые я получил:

res = numpy.array([["TEXT", 1, 1], ["XXX", 2, 2]], dtype=[('c1', 'object'), ('c2', 'i4'), ('c3', 'i4')])

приводит к: ValueError: неверный литерал для int () с основанием 10: 'TEXT'

res = numpy.array([("TEXT", 1, 1), ("XXX", 2, 2)], dtype=[('c1', 'object'), ('c2', 'i4'), ('c3', 'i4')])

приводит к массиву numpy, но с формой (2,) вместо (2,3) По-видимому [(), ()]! = [[], []], в чем реальная разница с точки зрения numpy?

Теперь давайте отбросим смешанный тип, оставивтолько информация заголовка:

res = numpy.array([[1, 1, 1], [1, 2, 2]], dtype=[('c1', '<f4'), ('c2', '<f4'), ('c3', '<f4')])

res.shape дает (2,3), но фактический массив - это список [list [tuple]]!?

Снова изменение внутреннего списка с результатами кортежав неправильной форме, но в правильном массиве.

Правильная форма имеет решающее значение для некоторых методов вычисления. Мое ожидание состоит в том, чтобы преобразовать пользовательский объект Matrix в корректный массив с сохранением формы и информации заголовка в качестве имени поля. Что я делаю не так?

...