Création d'une structure matricielle en trois dimensions et écriture dans un fichier de tapis dans Python

StackOverflow https://stackoverflow.com/questions/9448940

Question

Je suis très nouveau à Python. J'ai besoin d'avoir une matrice en 3 dimensions, afin d'enregistrer une matrice 8 par 8 d'une certaine longueur. Appelons le 530. Le problème est que j'ai utilisé NP.array car Matrix ne peut pas avoir plus de 2 dimensions comme le fait valoir Numpy.
R = zeros([8,8,530],float)
J'ai calculé ma matrice 8 par 8 en tant que np.matrix
R[:,:,ii] = smallR
Et ensuite j'essaie de l'enregistrer dans le fichier MAT car Scipy prétend le faire.
sio.savemat('R.mat',R)
Cependant, l'erreur indique que l'objet «numpy.ndarray» n'a pas d'attribut «éléments»

/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'

Était-ce utile?

La solution

Si vous tapez help(sio.savemat), vous voyez:

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.

Et donc même si vous ne reconnaissez pas .items() En tant que méthode du dictionnaire, il est clair que nous devrons utiliser un dictionnaire (un ensemble de paires de valeurs de clé; Google "Python Dictionary Tutorial" si nécessaire).

Dans ce cas:

>>> 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]]])

Fondamentalement, un dictionnaire est utilisé afin que les tableaux puissent être nommés, car vous pouvez stocker plusieurs objets dans un fichier .mat.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top