Создание структуры трехмерной матрицы и запись в мат-файле на Python.
Вопрос
Я очень новичок в Python.Мне нужно иметь трехмерную матрицу, чтобы сохранить матрицу 8 на 8 некоторой длины.Давайте позвоним 530.Проблема в том, что я использовал np.array, поскольку матрица не может иметь более двух измерений, как утверждает numpy.
R = zeros([8,8,530],float)
Я рассчитал свою матрицу 8 на 8 как np.matrix.
R[:,:,ii] = smallR
А затем я пытаюсь сохранить его в мат-файле, как утверждает scipy.
sio.savemat('R.mat',R)
Однако ошибка говорит, что объект «numpy.ndarray» не имеет атрибута «items».
/usr/local/lib/python2.7/dist-packages/scipy/io/matlab/mio.py:266: FutureWarning: Using oned_as default value ('column') This will change to 'row' in future versions
oned_as=oned_as)
Traceback (most recent call last):
File "ClassName.py", line 83, in <module>
print (buildR()[1])
File "ClassName.py", line 81, in buildR
sio.savemat('R.mat',R)
File "/usr/local/lib/python2.7/dist-packages/scipy/io/matlab/mio.py", line 269, in savemat
MW.put_variables(mdict)
File "/usr/local/lib/python2.7/dist-packages/scipy/io/matlab/mio5.py", line 827, in put_variables
for name, var in mdict.items():
AttributeError: 'numpy.ndarray' object has no attribute 'items'
Решение
Если вы наберете help(sio.savemat)
, Понимаете:
savemat(file_name, mdict, appendmat=True, format='5', long_field_names=False, do_compression=False, oned_as=None)
Save a dictionary of names and arrays into a MATLAB-style .mat file.
[...]
mdict : dict
Dictionary from which to save matfile variables.
и поэтому даже если ты не узнаешь .items()
ясно, что в качестве словарного метода нам понадобится словарь (набор пар ключ-значение;при необходимости погуглите «Урок по словарю Python»).
В этом случае:
>>> from numpy import zeros
>>> from scipy import io as sio
>>>
>>> R = zeros([8,8,530],float)
>>> R += 12.3
>>>
>>> sio.savemat('R.mat', {'R': R})
>>>
>>> S = sio.loadmat('R.mat')
>>> S
{'R': array([[[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3],
[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3],
[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3],
...,
...,
[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3],
[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3],
[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3]]]), '__version__': '1.0', '__header__': 'MATLAB 5.0 MAT-file Platform: posix, Created on: Sat Feb 25 18:16:02 2012', '__globals__': []}
>>> S['R']
array([[[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3],
[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3],
[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3],
...,
...,
[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3],
[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3],
[ 12.3, 12.3, 12.3, ..., 12.3, 12.3, 12.3]]])
По сути, словарь используется для присвоения имен массивам, поскольку вы можете хранить несколько объектов в одном файле .mat.