Saya memiliki satu set file MAT yang berisi matlab struct
. Struct memiliki banyak array. Saya ingin membuka file dan mentransfer semuanya ke dalam array. Sejauh ini saya telah menulis kode berikut:
import h5py
>>> fs = h5py.File('statistics_VAD.mat','r')
>>> list(fs.keys())
['#refs#', 'data']
>>>
>>> fs['data'].visititems(lambda n,o:print(n, o))
C <HDF5 dataset "C": shape (100, 1), type "|O">
P <HDF5 dataset "P": shape (100, 1), type "|O">
V <HDF5 dataset "V": shape (100, 1), type "|O">
Wn <HDF5 dataset "Wn": shape (100, 1), type "|O">
X <HDF5 dataset "X": shape (100, 1), type "|O">
a <HDF5 dataset "a": shape (100, 1), type "|O">
dn <HDF5 dataset "dn": shape (100, 1), type "|O">
>>> struArray = fs['data']
>>> print(struArray['P'])
<HDF5 dataset "P": shape (100, 1), type "|O">
Saya tidak tahu cara mentransfer HDF5 dataset "P"
ke array numpy
. Setiap saran akan dihargai
arr=struArray['P'][:]
lakukan? - person hpaulj   schedule 28.02.2021>>> arr=struArray['P'][:] >>> arr array([[<HDF5 object reference>], [<HDF5 object reference>], [<HDF5 object reference>], [<HDF5 object reference>], [<HDF5 object reference>], [<HDF5 object reference>], ...
. - person Dalek   schedule 28.02.2021refs
, tapi saya tidak tahu apakahh5py
dapat mengambilkannya untuk Anda.scipy.io.loadmat
dapat menangani file .mat gaya lama, tetapi meskipun demikian, hasilnya dapat memiliki elemen 'buram'. Tidak semua yang disimpan matlab ke file dapat diterjemahkan ke dalam numpy. - person hpaulj   schedule 28.02.2021save( 'statistics_VAD.mat','data', '-v7.3');
Saya mendapatkan kesalahan ini menggunakanscipy.io.loadmat
:mat_contents = sio.loadmat(mat_fname) raise NotImplementedError('Please use HDF reader for matlab v7.3 files') NotImplementedError: Please use HDF reader for matlab v7.3 files
- person Dalek   schedule 28.02.2021loadmat
dapat menangani file yang ditulis dalam gaya pra 7.3 asalkan hanya berisi struct dan sel dengan elemen matriks biasa, meskipun hasilnya mungkin berupa lapisan rumit dari array terstruktur dan tipe objek. SO lain telah menjelajahi file 7.3 dengan tingkat keberhasilan yang berbeda-beda. - person hpaulj   schedule 28.02.2021HDF5
satu kali atau lebih. Saya hanya memiliki Oktaf untuk bereksperimen, dan saya tidak tahu apakah itu mengikuti perubahan MATLAB di area ini. - person hpaulj   schedule 28.02.2021fs['data']['P']
adalah array referensi objek berbentuk (100,1). Sebuah objek dapat digunakan untuk mereferensikan objek lain dalam file, atau untuk menampung array bersarang -- array dari array. Apa yang Anda dapatkan jika Andaprint (struArray['P'][1,1])
? Mengetahui hal ini mungkin membantu menyimpulkan skema tersebut. - person kcw78   schedule 01.03.2021ValueError: Index (1) out of range (0-0)
tetapi dengan perintah ini saya mendapatkan>>> print (struArray['P'][1]) [<HDF5 object reference>]
. - person Dalek   schedule 01.03.2021[0,0]
untuk mendapatkan elemen pertama. Bentuknya adalah (100,1) - person hpaulj   schedule 01.03.2021>>> print (struArray['P'][0,0]) <HDF5 object reference>
. - person Dalek   schedule 01.03.2021struArray['P'][0,0]
objek yang direferensikan adalahfs [ struArray['P'][0,0] ]
. Untuk mendemonstrasikan perilaku, saya memberikan sedikit contoh dan memposting sebagai jawaban. (Ini bukan jawaban pasti, tetapi menunjukkan proses yang digunakan untuk mendapatkan objek, lalu membaca data yang direferensikan. Saya juga menambahkan kode untuk referensi wilayah (untuk kelengkapan). - person kcw78   schedule 01.03.2021