- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在处理存储在 ASCII 文件中的数组数据(类似于 this thread )。我的文件至少有 2M 行 (158 MB),并且分为具有不同架构的多个部分。在我读取格式的模块中,我想通过 lines = open('myfile.txt', 'r').readlines()
读取整个文件, 所以我可以索引每个部分的位置,然后将我需要的每个部分读取到 NumPy 数据结构中。
例如,某节的一个摘录是:
>>> print lines[5:10]
[' 1 0.1000 0.300E-03 0.000E+00 0.300E-03 0.000E+00 0.000E+00 0.300E-03 0.100E-03\n',
' 2 0.1000 0.120E-02 0.000E+00 0.120E-02 0.000E+00 0.000E+00 0.120E-02 0.100E-03\n',
' 3 0.1000 0.100E-02 0.000E+00 0.100E-02 0.000E+00 0.000E+00 0.100E-02 0.100E-03\n',
' 4 0.1000 0.110E-02 0.000E+00 0.110E-02 0.000E+00 0.000E+00 0.110E-02 0.100E-03\n',
' 5 0.1000 0.700E-03 0.000E+00 0.700E-03 0.000E+00 0.000E+00 0.700E-03 0.100E-03\n']
具有架构 [int, float, float, float, float, float, float, float, float]
,后面的部分会有一个更简单的 [int, float]
模式:
>>> print lines[20:25]
[' 1 0.00000E+00\n',
' 2 0.43927E-07\n',
' 3 0.44006E-07\n',
' 4 0.44020E-07\n',
' 5 0.44039E-07\n']
如何使用 NumPy 快速加载行的不同部分?我看到有 np.loadtxt
, 但它需要一个文件句柄,并一直读取到最后。我还看到 np.from*
功能,但我不确定如何将它们与我已经阅读的 lines
一起使用.我需要读取文件两次吗?
关于异构数据类型,我想我可以使用复合 dtype
, 比如 np.dtype([('col1', '<i2'), ('col2', 'f4'), ('col3', 'f4'), ('col4', 'f4'), ('col5', 'f4'), ('col6', 'f4'), ('col7', 'f4'), ('col8', 'f4'), ('col9', 'f4')])
,对吗?
最佳答案
StringIO
可以从字符串创建文件类型对象。所以你可以做
from StringIO import StringIO
m = np.loadtxt(StringIO('\n'.join(lines[5:10])))
或者更简单,就是做
m = np.fromiter(lines[5:10],np.dtype([('col1', '<i2'), ('col2', 'f4'), ('col3', 'f4')]))
关于python - NumPy:从字符串列表中加载异构数据列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5657444/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!