Создание структуры трехмерной матрицы и запись в файл mat в Python - PullRequest
1 голос
/ 26 февраля 2012

Я очень новичок в Python.Мне нужно иметь трехмерную матрицу, чтобы сохранить матрицу 8 на 8 в некоторой длине.Давайте назовем 530. Проблема в том, что я использовал np.array, поскольку матрица не может иметь более 2-х измерений, как утверждает numpy.R = zeros([8,8,530],float)Я рассчитал свою матрицу 8 на 8 как np.matrixR[:,:,ii] = smallRИ затем я пытаюсь сохранить его в файле mat, как заявляет 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_variablesfor name, var in mdict.items(): AttributeError: 'numpy.ndarray' object has no attribute 'items'

1 Ответ

3 голосов
/ 26 февраля 2012

Если вы наберете 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() в качестве словарного метода, ясно, что нам понадобится использоватьсловарь (набор пар ключ-значение; при необходимости google "учебник по словарю 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.

...