2017-06-29 200 views
0

我有一个100x200的输入和一个1x100的目标矩阵,我用它来运行一个gridsearch并在python中创建一个分类器。但是,我得到的错误是我的训练集的目标数据不是数组。我已经试过:如何将Matlab矩阵转换为python数组

target=np.asarray(matTarget) 

凡matTarget只是我使用scipy.io.loadmat从MATLAB进口的目标。

我确切的错误是

len() of unsized object 

当我尝试target.size得到了一个空白的大小为好。

如果我不这样做阵列转换,然后我得到

Expected array-like (array or non string sequence) got {'_header_': b'Matlab matfile ... Array([[1],[1]...)} 

我仍然在Matlab原始矩阵和也使用np.array代替asarray尝试。

如果我做print(matTarget.keys())然后我得到( '',' '' 全局”, 'y_train'])

y_train是脚垫文件本身

的名字

回答

1

根据scipy.io.loadmat的文档,它返回一个字典,其中的值是包含的矩阵。

返回: mat_dict:字典

词典与变量名作为关键字,和加载矩阵作为值。

所以你需要使用它与numpy的前选择它的名字你的矩阵:

matrix = matTarget['name of matrix'] 
+0

因此,在你网上有,为MATRIX一样“矩阵的名字”?所以我从Matlab导入的矩阵使用scipy.io.loadmat称为matTarget。我试图创建的矩阵只是目标。所以如果我按照你的代码写代码,那么我会得到'target = matTarget ['target']',但是如果target被定义为它自己的东西,那么它是如何工作的呢? – a13a22

+0

@aksharagarwal不,“矩阵的名称”是一个字符串文字,您应该用matlab文件中矩阵的实际名称替换它。 'matrix'是一个变量,它存储对'matTarget [']'返回的矩阵的引用。 'matTarget'是一个字典,其中包含矩阵的名称作为关键字,矩阵本身作为值。你可以发布'print(matTarget.keys())'的输出吗?(可能是你的问题的扩展)? –

+0

我将该输出添加到问题中。所以我应该运行'target2 = matTarget('y_train'),然后将目标定义为np.asarray(target2)?这样做可能会导致字典不可调用的错误 – a13a22