Python的等价Matlab的textscan的(Python equivalent of Mat

2019-08-02 01:59发布

我有一些转移Matlab代码到Python工作。 我是比较新的Python和我不能确定一个Python相当于Matlab的的textscan方法。 任何帮助将不胜感激。

Answer 1:

如果您要翻译Matlab的Python的,我会假设你已经使用NumPy的。

在这种情况下,你可以使用np.loadtxt (如果没有缺少值)或np.genfromtxt (如果存在缺少值:我不知道Matlab的是否textscan处理这一点)。

给我们更多的一些细节,如果你需要更多的帮助!



Answer 2:

MATLAB的转换的例子textscan到Python + NumPy的的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()

有关类型的更多信息,请参阅数据类型的对象(D型) 。



Answer 3:

你必须寻找与NumPy和py2mat。 如果我的textscan()的理解是正确的,你可以只使用open()



Answer 4:

如果你的成绩比简单分隔文本更复杂,比如如果有混合的其他文字,无用位,那么你可以使用numpy的的fromregex功能,以取代textscanfromregex让您读取在基于正则表达式,用基团(份包围()作为值。

因此,例如说,你有这样的台词:

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,如具有不同列中有不同的类型,以及指定列名给一个结构数组。 被覆盖的文件中。

然而,利用简单的分隔或固定宽度的数据处理时,它比其他方法更复杂。



文章来源: Python equivalent of Matlab textscan