Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB结构转换成python_Python_Matlab_Numpy_Tensorflow_Scipy - Fatal编程技术网

MATLAB结构转换成python

MATLAB结构转换成python,python,matlab,numpy,tensorflow,scipy,Python,Matlab,Numpy,Tensorflow,Scipy,我有一个.mat文件,其结构为1x4349,有6个字段。第一列标记为“A”,每个单元格是一个大小不同的方形矩阵(即17x17、18x18等)。问题是,如何将matlab结构转换为可用的python数据?没有使用matlab.engine,我只有pandas、numpy和scipy.io。我可以使用loadmat导入数据。我最终想获取这些数据 将其导入tensorflow from scipy.io import loadmat import tensorflow as tf data = lo

我有一个.mat文件,其结构为1x4349,有6个字段。第一列标记为“A”,每个单元格是一个大小不同的方形矩阵(即17x17、18x18等)。问题是,如何将matlab结构转换为可用的python数据?没有使用matlab.engine,我只有pandas、numpy和scipy.io。我可以使用loadmat导入数据。我最终想获取这些数据 将其导入tensorflow

from scipy.io import loadmat
import tensorflow as tf

data = loadmat('.../template1-lib5-eqns-CR-RESULTS-SET1-FINAL.mat')

nz = data['Graphs']['nz']
A = data['Graphs']['A']
print(nz[:,1])
print(A[:,1])
Graphs是结构,nz是列,单元格1应该返回数字6,但我得到的是
[array([[6]],dtype=uint8)]

打印一张照片会给我:

[array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]],
      dtype=uint8)]

如果您需要更多信息,请告诉我。谢谢。

我所要做的就是将所有内容上传到熊猫数据框中

raw_data = loadmat(path, squeeze_me=True)
data = raw_data['Graphs']
graph_labels = pd.DataFrame()
graph_labels['perf'] = raw_data['Objective'][0:1000]
graph_labels['np'] = data['np'][0:1000]

这完成了任务,使matlab中的所有内容都可用。

看起来
loadmat
为您提供了一个有效的
numpy
数组。什么是
data['Graphs']
shape
dtype
?数据都在那里,你只需要学会如何找到它。例如,在MATLAB中,一切都是2d,甚至“标量”都是(1,1)形状。它说它的形状是(143249)使用:'data['Graphs'].shape'至于dtype,我使用了data['Graphs'].dtype,它返回:[('A','O'),('Ln','O'),('transferFunc','O'),('types','O'),('nz','O'),('np和'O')],所以所有字段的dtype都是'O',object。这意味着
nz[:,1]
是(在repr显示中)
np.array([array([[6]],dtype=uint8)],dtype=object)
。什么是
nz[0:,1]
,在行和列上都选择?这些字段是包含数组(其本身可能是2d(1,1))的对象数据类型数组。你只需要深入到结构中,边做索引。print(数据['Graphs']['nz'][0:,1]给出[array([[6]],dtype=uint8)]Oops,删除:,
nz[0,1]
。你想索引(14349)形状数组的一项。
np.vstack(nz[0,:])
可能会产生一个(439,1,1)数组。或者(43249,)与另一个[:,0,0]索引层。