Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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
如何在Python中以Python语法读取保存的Matlab三维矩阵(Dicom矩阵)?_Python_Matlab_Numpy_Scipy_Dicom - Fatal编程技术网

如何在Python中以Python语法读取保存的Matlab三维矩阵(Dicom矩阵)?

如何在Python中以Python语法读取保存的Matlab三维矩阵(Dicom矩阵)?,python,matlab,numpy,scipy,dicom,Python,Matlab,Numpy,Scipy,Dicom,我在Matlab中保存了一个坐标为(row=288,col=288,slice(z)=266)的3D矩阵。 现在我想用Python加载它。不幸的是,在加载之后,它在Python中是(row=288,col=266,slice(z)=288)。 考虑到这一点,Matlab语法表示大小:(第3维的行、列、切片)Python语法表示大小:(第3维的切片、行、列) 例如,在下面的代码中,当我想将变量A作为数组时,它是(行=288,列=266,切片(z)=288): 从数学导入sqrt 从浏览导入数据 将

我在Matlab中保存了一个坐标为(row=288,col=288,slice(z)=266)的3D矩阵。
现在我想用Python加载它。不幸的是,在加载之后,它在Python中是(row=288,col=266,slice(z)=288)
考虑到这一点,Matlab语法表示大小:(第3维的行、列、切片)Python语法表示大小:(第3维的切片、行、列)

例如,在下面的代码中,当我想将变量A作为数组时,它是(行=288,列=266,切片(z)=288):

从数学导入sqrt
从浏览导入数据
将matplotlib.pyplot作为plt导入
进口cv2
导入pydicom
将scipy.io作为sio导入
导入操作系统
将numpy作为np导入
对于中的根目录、目录和文件
os.walk('G:\PCodes\Other_code'):
matfiles=[[uu表示文件中的uu,如果u.endswith('.mat')]
对于matfiles中的matfile:#matfile:'Final_Volume.mat'
Patient_All_Info=sio.loadmat(os.path.join(root,matfile))#Patient_All_Info:{dict}
患者所有信息项()
A=患者所有信息[“最终体积”]#A:{ndarray}:(288266288)-它不是(行=288,列=288,切片(z)=266)坐标。
形状(A)#S:(288288266)?
dcm_image=pydicom.read_文件('A'))
image=dcm\u image.pixel\u数组
plt.imshow(图像,cmap='gray')
plt.show()
如何在Python中加载Matlab保存的3D矩阵(Dicom矩阵)?

在倍频程会话中:

>> x = reshape(1:24,4,3,2);
>> save -v7 'test.mat' x
对于Python,
loadmat
保留形状和
F
顺序:

In [200]: data = loadmat('test.mat')
In [208]: data['x'].shape
Out[208]: (4, 3, 2)
In [209]: data['x'].ravel(order='F')
Out[209]: 
array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.,
       14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.])
转置将产生一个(2,3,4)数组

transpose
可以采用顺序参数,例如
data['x']。transpose(2,0,1)


(我不熟悉
dicom
,但希望这能说明
loadmat
如何处理来自MATLAB的3d数组。)

MATLAB是F阶,最外层的最后一个维度。
loadmat
返回的内容可能需要某种转置(轴交换)。我必须用八度音阶的小例子来演示。
In [200]: data = loadmat('test.mat')
In [208]: data['x'].shape
Out[208]: (4, 3, 2)
In [209]: data['x'].ravel(order='F')
Out[209]: 
array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.,
       14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.])
In [210]: data['x'].T
Out[210]: 
array([[[ 1.,  2.,  3.,  4.],
        [ 5.,  6.,  7.,  8.],
        [ 9., 10., 11., 12.]],

       [[13., 14., 15., 16.],
        [17., 18., 19., 20.],
        [21., 22., 23., 24.]]])