La creación de un Tres Dimensiones de la Matriz de la estructura y la escritura en la estera de archivos en Python

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

Pregunta

Soy muy nuevo en Python.Necesito tener un 3 dimensiones de la matriz, con el fin de ahorrar 8 por 8 matriz en algunas de longitud.Vamos a llamar a 530.El problema es que he usado np.matriz ya que la matriz no puede tener más de 2 dimensiones como numpy argumenta.
R = zeros([8,8,530],float)
He calculado mi 8 por 8 matriz como np.matriz
R[:,:,ii] = smallR
Y, entonces trato de guardarlo en el tapete de archivo como scipy pretensiones de hacerlo.
sio.savemat('R.mat',R)
Sin embargo, el error dice " numpy.ndarray' el objeto no tiene ningún atributo 'elementos'

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

¿Fue útil?

Solución

Si el tipo de help(sio.savemat), ver:

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.

y por lo que incluso si usted no reconoce .items() como un diccionario de método, es claro que la vamos a necesitar el uso de un diccionario (un juego de llaves, los pares de valores;google "diccionario de python tutorial" si es necesario).

En este caso:

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

Básicamente, se emplea un diccionario, de manera que las matrices puede ser nombrado, ya que puede almacenar varios objetos en uno .estera de archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top