Я загрузил файл MATLAB .mat
через scipy.io.loadmat
и дал мне список объектов numpy.void
.
Может кто-нибудь сказать мне, что это такое, как они могут быть использованы и где я могу получить ссылку документация на них?
Я загрузил файл MATLAB .mat
через scipy.io.loadmat
и дал мне список объектов numpy.void
.
Может кто-нибудь сказать мне, что это такое, как они могут быть использованы и где я могу получить ссылку документация на них?
Согласно документации 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
.
Однако, как вопрос самосогласования, заново заново создайте пример: Позвольте создать собственный тип записи, где у него есть два поля, связанные для каждой создаваемой вами переменной:
name
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
.