إنشاء هيكل مصفوفة ثلاثية الأبعاد والكتابة في ملف mat في بايثون

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

سؤال

أنا جديد جدًا على بايثون.أحتاج إلى مصفوفة ثلاثية الأبعاد، من أجل حفظ مصفوفة 8 × 8 في بعض الطول.دعنا نتصل بالرقم 530.المشكلة هي أنني استخدمت np.array نظرًا لأن المصفوفة لا يمكن أن تحتوي على أكثر من بعدين كما يقول numpy.
R = zeros([8,8,530],float)
لقد حسبت مصفوفتي 8 × 8 باعتبارها np.matrix
R[:,:,ii] = smallR
وبعد ذلك أحاول حفظه في ملف mat كما يدعي scipy أنه يفعل ذلك.
sio.savemat('R.mat',R)
ومع ذلك، يظهر خطأ يقول أن الكائن "numpy.ndarray" لا يحتوي على سمة "عناصر"

/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() كطريقة قاموس، من الواضح أننا سنحتاج إلى استخدام قاموس (مجموعة من المفاتيح وأزواج القيمة؛جوجل "برنامج تعليمي لقاموس بايثون" إذا لزم الأمر).

في هذه الحالة:

>>> 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 واحد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top