Похоже, featurenames
- это cell
в MATLAB.Все матрицы и ячейки на этом языке двумерные.Клетки могут содержать смесь элементов, размера и типа.Это больше похоже на список python
, чем на числовой массив.loadmat
возвращает это как массив dtype 2-го объекта, содержащий массивы.
Вы выбрали 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'