将.mat文件加载到Python后如何获取字符串

时间:2018-06-01 15:19:54

标签: python matlab scipy

我有一个.mat文件,其中包含数字和字符串的变量。当我加载它并获取包含字符串的变量时,我不明白如何实际获取字符串:

data = scipy.io.loadmat(pathName)
featurenames=data['featurenames']
print(featurenames[0:2,0])

作为输出我得到:

[array(['Intensity_SubsBlue_Nuclei_1_IntegratedIntensity'], dtype='<U47')
 array(['Intensity_SubsBlue_Nuclei_2_MeanIntensity'], dtype='<U41')]

如何进入此array?我想要只是字符串。

谢谢!

2 个答案:

答案 0 :(得分:1)

我不太熟悉阅读Matlab文件,但你已经有了一个数组。如果你想把每个字符串放在一个变量中,你可以做的是:

string1 = featurenames[0][0]
string2 = featurenames[1][0]

如果这不是您正在寻找的答案,请问您能否更具体地提出您的问题?谢谢!

答案 1 :(得分:0)

看起来featurenames在MATLAB中是cell。所有矩阵和单元格都是该语言的2d。细胞可以包含元素,大小和类型的混合。这更像是python列表而不是numpy数值数组。 loadmat将其作为2d对象返回dtype数组 - 包含数组。

您选择了featurenames[0:2, 0],它将这些单元格中的2个作为1d数组返回。

我可以用:

重新创建你的数组
In [9]: arr = np.empty(2, dtype=object)
In [11]: arr[:] = [np.array(['Intensity_SubsBlue_Nuclei_1_IntegratedIntensity'],
    ...:  dtype='<U47'),
    ...:  np.array(['Intensity_SubsBlue_Nuclei_2_MeanIntensity'], dtype='<U41')]
    ...: 
    ...:  
In [12]: arr
Out[12]: 
array([array(['Intensity_SubsBlue_Nuclei_1_IntegratedIntensity'], dtype='<U47'),
       array(['Intensity_SubsBlue_Nuclei_2_MeanIntensity'], dtype='<U41')],
      dtype=object)
In [13]: print(arr)
[array(['Intensity_SubsBlue_Nuclei_1_IntegratedIntensity'], dtype='<U47')
 array(['Intensity_SubsBlue_Nuclei_2_MeanIntensity'], dtype='<U41')]

所以你必须访问元素,然后是每个元素中的元素:

In [14]: arr[0][0]
Out[14]: 'Intensity_SubsBlue_Nuclei_1_IntegratedIntensity'
In [15]: [a.item() for a in arr]
Out[15]: 
['Intensity_SubsBlue_Nuclei_1_IntegratedIntensity',
 'Intensity_SubsBlue_Nuclei_2_MeanIntensity']

对于单个元素数组,[0]item()同样有效。

或者可以使用concatenate将外部元素连接到一个数组中。请注意dtype

中的更改
In [16]: np.concatenate(arr)
Out[16]: 
array(['Intensity_SubsBlue_Nuclei_1_IntegratedIntensity',
       'Intensity_SubsBlue_Nuclei_2_MeanIntensity'], dtype='<U47')
In [17]: _[0]
Out[17]: 'Intensity_SubsBlue_Nuclei_1_IntegratedIntensity'