Как получить строку после загрузки .mat файла в Python - PullRequest
0 голосов
/ 01 июня 2018

У меня есть .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?Я хочу только строки.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Похоже, у вас есть список массивов scipy / numpy.Проблема, с которой вы сталкиваетесь, заключается в том, что хотя тип данных не имеет особого значения для Python, он определенно имеет значение для scipy и numpy, и я предполагаю, что вы пытаетесь передать их в строки Python.Следующий фрагмент кода должен это сделать (при условии, что ваш вывод имеет имя matFileOut):

## for the zeroth array in your list, convert the scipy/numpy array to a Python list, then take the zeroth (only) element
matFileOut[0].tolist()[0]
0 голосов
/ 01 июня 2018

Похоже, 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'
0 голосов
/ 01 июня 2018

Я не очень знаком с файлами Matlab, но вы уже получили массив.Если вы хотите поместить каждую строку в переменную, вы можете сделать следующее:

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

Пожалуйста, если это не тот ответ, который вы ищете, не могли бы вы быть более конкретным в своем вопросе?спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...