Подтвердить что ты не робот

Numpy.void type - как его использовать?

Я загрузил файл MATLAB .mat через scipy.io.loadmat и дал мне список объектов numpy.void.

Может кто-нибудь сказать мне, что это такое, как они могут быть использованы и где я могу получить ссылку документация на них?

4b9b3361

Ответ 1

Согласно документации numpy: http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html, numpy.void типы определяются как гибкие данные типы. В основном, это типы данных, в которых нет предопределенного типа, связанного с переменной (-ами), на которую вы смотрите. Если вы посмотрите numpy, у вас есть такие типы данных, как float, uint8, bool, string и т.д.

void предназначен для размещения более универсальных и гибких типов и относится к тем типам данных, которые не обязательно попадают ни в один из этих предопределенных типов данных. Эта ситуация чаще всего встречается при загрузке в struct, где каждый элемент имеет несколько типов данных, связанных с несколькими полями. Каждый элемент структуры может иметь комбинацию разных типов данных, и объединение всех этих типов данных для представления экземпляра этого элемента структуры приводит нас к numpy.void.

В документации вы можете выполнять те же операции, что и с любым другим типом данных. Взгляните на методы типа данных generic здесь: http://docs.scipy.org/doc/numpy/reference/generated/numpy.generic.html#numpy.generic. Фактически, все типы данных numpy выводятся из этого общего класса, включая numpy.void.

В первой ссылке, которую я представил в начале этого сообщения, он показывает хороший пример того, как создать пользовательский тип записи, где запись представляет собой комбинацию кортежей чисел и строки. При создании списка этих записей каждый тип в списке имеет тип numpy.void, и он демонстрирует, что запись относится к этому типу данных. Однако имейте в виду, что этот список записей имеет тип данных , который относится к этой записи, но каждый элемент этого списка будет иметь тип numpy.void.


Однако, как вопрос самосогласования, заново заново создайте пример: Позвольте создать собственный тип записи, где у него есть два поля, связанные для каждой создаваемой вами переменной:

  • 16-разрядная строка с полем с именем name
  • 2-элементный набор чисел с плавающей запятой, каждый из которых содержит 64 бита, с полем с именем grades

Таким образом, вы бы сделали что-то вроде:

import numpy as np
dt = np.dtype([('name', np.str_, 16), ('grades', np.float64, (2,))])

Таким образом, создайте примерный список из двух элементов и создайте экземпляры своих полей:

x = np.array([('Sarah', (8.0, 7.0)), ('John', (6.0, 7.0))], dtype=dt)

Поскольку мы сделали этот список в numpy.array, мы ожидаем, что его тип данных будет таким:

type(x)

Получаем:

<type 'numpy.ndarray'>

Помните, что сам список представляет собой numpy.array, но не отдельные элементы.


Чтобы получить доступ ко второму элементу этого списка, который является второй записью, мы делаем:

x[1]

Получаем:

('John', [6.0, 7.0])

Чтобы проверить тип второй записи, сделаем следующее:

type(x[1])

Получаем:

<type 'numpy.void'> # As expected

Дополнительные бонусы для вас

Чтобы получить доступ к названию второй записи, выполните следующие действия:

x[1]['name']

Получаем:

'John'

Для доступа к классам второй записи мы делаем:

x[1]['grades']

Получаем:

array([ 6.,  7.])

Чтобы проверить тип имени внутри второй записи, сделаем следующее:

type(x[1]['name'])

Получаем:

<type 'numpy.string_'>

Чтобы проверить тип оценок внутри второй записи, сделаем следующее:

type(x[1]['grades'])

Получаем:

<type 'numpy.ndarray'>

Обратите внимание, что каждый элемент в этом списке имеет тип numpy.void. Однако отдельные поля для каждого элемента в нашем списке являются либо кортежем чисел, либо строкой. коллекция этих элементов вместе имеет тип numpy.void.