Нольмерный numpy.ndarray: единственный элемент - это двумерный массив: как получить к нему доступ? - PullRequest
0 голосов
/ 03 июля 2018

Я импортировал файл Matlab * .mat, используя scipy.io и пытаясь извлечь из него 2D-данные. Внутри есть несколько массивов, и когда я пытаюсь их получить, я застреваю при последней операции.

Данные выглядят как на картинке ниже. Когда я пытаюсь проиндексировать его: IndexError: слишком много индексов для массива

Я гуглил до такой степени, что он выглядит как однозначный кортеж, где единственным элементом является мой массив. Это в принципе должно быть индексируемым, но это не работает. Тип (данные) возвращает <<em> класс 'numpy.ndarray' >

Итак, вопрос: как мне вывести мой 2D-массив из этой структуры данных?

    data[0] # Doesn't work.

array in question

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Поиск по loadmat должен дать много SO вопросов, которые помогут вам разобрать этот результат. loadmat должен переводить объекты MATLAB в приближения Python / numpy.

data = io.loadmat(filename)

должен создать словарь с несколькими клавишами обложки и различными ключами данных. list(data.keys()) чтобы идентифицировать их.

x = data['x']

должно соответствовать переменной x в рабочем пространстве MATLAB. Это может быть массив 2d порядка F, соответствующий матрице MATLAB.

Это может быть (n, m) массив dtype объекта, соответствующий ячейке MATLAB.

Это может быть структурированный массив, в котором имена полей соответствуют атрибутам MATLAB struct.

В вашем случае похоже, что у вас есть массив dtype объекта 0d. Форма имеет вид (), пустой кортеж (1d имеет (n, m) форму, 2d имеет (n, m) форму и т. Д.). Вы можете извлечь элемент из массива () с помощью:

 y[()]
 y.item()

[()] выглядит странно, но это логично. Для 1d массива y[1] можно записать как y[(1,)]. Для 2d y[1,2] и y[(1,2)] одинаковы. Индексный кортеж должен соответствовать количеству измерений. Следовательно, () может индексировать массив фигур ().

0 голосов
/ 03 июля 2018

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

Исходные данные - это нульмерный элемент, где единственным элементом является двумерный массив. Способ вывести этот элемент, очевидно, таков:

    z = data.item()[()][0]
    print(z)         

Окончательный результат ниже. Я получил свой 2D массив:

Workable 2D data

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