Наиболее вероятное объяснение состоит в том, что ваша библиотека плохо работает со списками списков, особенно , где подсписки имеют разную длину . Вы должны проверить, так ли это на самом деле.
Согласно документам , scipy.io.savemat
предназначен для словаря массивов, который вы не предоставили:
Сохранение словаря имен и массивов в файл .mat в стиле MATLAB.
Это сохраняет объекты массива в данном словаре в MATLAB-
стиль .mat файл.
Что вы можете сделать, это реструктурировать ваши данные:
dic = {"A": np.array([1, 2, 3]),
"B": np.array([1, 2, 4]),
"C": np.array([6, 7, 8, 9]),
"D": np.array([1])}
Помните, что массив numpy
со строками разной длины станет dtype=Object
и станет практически непригодным для большинства векторизованных функций. С scipy
это, вероятно, тоже не будет работать.
Тяжелое решение - выполнить преобразование при повторной загрузке данных:
import numpy as np
from operator import itemgetter
lst = [[np.array([[1, 2, 3]]), np.array([[1, 2, 4]]),
np.array([[6, 7, 8, 9]]), np.array([[1]])]]
res = list(map(list, (map(itemgetter(0), map(list, lst[0])))))
[[1, 2, 3], [1, 2, 4], [6, 7, 8, 9], [1]]
В Python нет нативной композиции функций, но приведенную выше логику можно сделать более читабельной с помощью сторонней библиотеки toolz
:
from operator import itemgetter
from toolz import compose
res = list(map(compose(list, itemgetter(0), list), lst[0]))