python中無法正確讀取.mat檔案的解決辦法

Tnix發表於2017-03-08

在python中匯入本地.mat資料檔案時,總是無法得到正確的資料。

問題程式碼如下:

from numpy import *
import scipy.io

mnist_train = `D:Machine LearningTensorFlowSoftmax Regressionmnist_datasetmnist_train.mat`
mnist_train_labels = `D:Machine LearningTensorFlowSoftmax Regressionmnist_datasetmnist_train_labels.mat`

x = scipy.io.loadmat(mnist_train)
label = scipy.io.loadmat(mnist_train_labels)

print(x.shape)

上段程式碼輸出的結果是(1,1),而對應的資料應是(60000,784)。此時,如果直接輸出x,會看到以下結果:

```
[[ {`__version__`: `1.0`, `__header__`: b`MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Tue Nov 29 12:43:31 2011`, 
`mnist_train`: array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       ...,
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.]], dtype=float32), `__globals__`: []}]]
```

可見,如果本地mat檔案包含了額外的資訊,則單純使用scipy.io.loadmat()無法直接讀取到所需資料,還應該補充一行對應的程式碼。

x = scipy.io.loadmat(mnist_train)
train_x = x[`mnist_train`]
label = scipy.io.loadmat(mnist_train_labels)
train_label = label[`mnist_train_labels`]

相關文章