Python эквивалент Matlab текстов может
Я работаю с переносом кода Matlab в Python. Я относительно новичок в Python и не уверен, что Python эквивалент Matlab's textscan
метод. Любая помощь будет принята с благодарностью.
4 ответа
Если вы переводите Matlab на Python, я предполагаю, что вы уже используете NumPy.
В этом случае вы можете использовать np.loadtxt
(если значения не пропущены) или np.genfromtxt
(если отсутствуют значения: я не уверен, что Матлаб textscan
справится с этим).
Дайте нам еще несколько деталей, если вам нужна дополнительная помощь!
Пример конвертации MATLAB textscan
в Python + NumPy's np.loadtxt
:
Пусть наш файл данных results.csv
содержать:
0.6236,sym2,1,5,10,10
0.6044,sym2,2,5,10,10
0.548,sym2,3,5,10,10
0.6238,sym2,4,5,10,10
0.6411,sym2,5,5,10,10
0.7105,sym2,6,5,10,10
0.6942,sym2,7,5,10,10
0.6625,sym2,8,5,10,10
0.6531,sym2,9,5,10,10
Код Matlab:
fileID = fopen('results.csv');
d = textscan(fileID,'%f %s %d %d %d %d', 'delimiter',',');
fclose(fileID);
Код Python + NumPy:
fd = open('results2.csv','r')
d = np.loadtxt(fd,
delimiter=',',
dtype={'names': ('col1', 'col2', 'col3', 'col4', 'col5', 'col6'),
'formats': ('float', 'S4', 'i4', 'i4', 'i4', 'i4')})
fd.close()
Для получения дополнительной информации о типах см. Объекты типа данных (dtype).
Вы должны искать Numpy и py2mat. Если мое понимание textcan() верно, вы можете просто использовать open()
Если ваши результаты сложнее, чем простой текст с разделителями, например, если есть другие бесполезные фрагменты текста, то вы можете использовать Numpy's fromregex
функция для замены textscan
, fromregex
позволяет читать на основе регулярного выражения, с группами (части, окруженные ()
) как значения.
Например, скажем, у вас есть такие строки:
field1 is 1, field 2 is 5 to 6.6
field1 is 2, field 2 is 7 to 0.1
И вы хотите получить значения чисел (не имена полей):
[[1, 5, 6.6],
[2, 7, 0.1]]
Ты можешь сделать
data = np.fromregex('temp.txt', r'field1 is ([\d\.]+), field 2 is ([\d\.]+) to ([\d\.]+)', dtype='float')
[\d\.]+
соответствует любому числу, включая десятичные знаки, и ()
говорит NumPy использовать этот результат в качестве значения. Вы также можете указать более сложные dtypes, такие как разные столбцы разных типов, а также указать имена столбцов, чтобы получить структурированный массив. Это описано в документации.
Однако это более сложно, чем другие подходы, когда дело касается простых данных с разделителями или фиксированной ширины.