Python 如何使用scipy weave和sscanf将字符串解析为numpy数组?

Python 如何使用scipy weave和sscanf将字符串解析为numpy数组?,python,scipy,scanf,Python,Scipy,Scanf,我正在编写一些科学的python代码,我想加快速度。一个具体的问题是使用格式化字符串读取大量存储在文本文件中的数据。我发现使用split()和np.array()的方法工作得很好,但与我在FORTRAN中使用的方法相比,速度非常慢 我想知道是否可以在这里使用scipy.weave,不幸的是,我不是C方面的专家。下面是一个示例: line =" 0.7711408E-01 0.7616138E-01 0.7521919E-01" arr = np.array(line.split(),dty

我正在编写一些科学的python代码,我想加快速度。一个具体的问题是使用格式化字符串读取大量存储在文本文件中的数据。我发现使用split()和np.array()的方法工作得很好,但与我在FORTRAN中使用的方法相比,速度非常慢

我想知道是否可以在这里使用scipy.weave,不幸的是,我不是C方面的专家。下面是一个示例:

line ="  0.7711408E-01  0.7616138E-01  0.7521919E-01"
arr = np.array(line.split(),dtype=np.float)
print arr
这是可行的,但对于大型数据集来说,速度要慢得多。像这样的事情怎么样,但是工作

line ="  0.7711408E-01  0.7616138E-01  0.7521919E-01"
arr = np.zeros(3)
weave.inline("""sscanf(std::string(line).c_str(),"%f %f %f",arr);""",['line','arr'])
print arr

NoMy.FasFILE()应该按照你说的更快做,但是我建议你不要保存东西。TXT如果你有很多的话,使用一些保存二进制的东西,因为这对于DISKSACKE更好,IO也是我猜的(我现在正在考虑,但是其他类似的数据格式也存在)(你的文件的大小是多少?)我不想触及节目的大部分内容。输出(~10GB)由许多FORTRAN程序生成。我认为对于那些人来说,将数据放入格式化文本是最简单的事情。我正在展示一个易于理解的示例。现实世界中的情况更为复杂,numpy.fromfile()不起作用。按照split()的方法,Python真的要花很多时间一遍又一遍地做同样的事情?每个文件的大小?(如果它是10000多个文件,那么将所有数据重新写入一个大文件是值得的,保存在.fits左右,因此占用的磁盘空间要少得多,IO运行速度也要快得多,尽管您必须经历一次写入一个大文件的过程)当然这是可能的,我希望在python中找到一种很好的方法来处理这个问题。对我来说,如果我可以安全地假设数据是格式化的,那么执行split()np.array()的缓慢转换似乎很奇怪。没有必要一直搜索分隔符,因为我知道它在哪里。在进行浮点转换时,不需要进行所有类型的测试,因为我确切地知道字符串的外观。我只是想避免所有限制我表现的过度行为…,不过还是要谢谢你的想法!限制性能的是10GB的文本文件。:)如果修改FORTRAN代码是一种选择,请考虑使用HDF5格式()来编写数据。然后使用h5py或PyTables读取python中的数据。