我有一个.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
?我想要只是字符串。
谢谢!
答案 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'