numpy中的快速无读取结构ascii数据文件

2024-04-24 10:18:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从.xsf文件中读取一个数据网格(浮动的3D数组)。(格式文档在此处http://www.xcrysden.org/doc/XSF.html开始块_DATAGRID_3D块)

问题是数据分为5列,如果元素Nx*Ny*Nz不能被5整除,那么最后一行的长度可以是任意的。 因此,我不能使用numpy.genfromtxt()numpy.loadtxt文件()。。。在

我做了一个子程序,确实解决了这个问题,但速度非常慢(因为它可能使用了紧循环)。我要读取的文件很大(>;200mb200x200x200=8000000 ASCII数字)

有没有什么真正快速的方法可以将python/numpy中这种不友好的格式读入ndarray?在


xsf datagrids如下所示(例如shape=(3,3,3))

BEGIN_BLOCK_DATAGRID_3D
 BEGIN_DATAGRID_3D_this_is_3Dgrid          
 3  3  3         # number of elements Nx Ny Nz                     
 0.0 0.0 0.0     # grid origin in real space                     
 1.0 0.0 0.0     # grid size in real space                    
 0.0 1.0 0.0                               
 0.0 0.0 1.0                          
   0.000  1.000  2.000  5.196  8.000   # data in 5 columns     
   1.000  1.414  2.236  5.292  8.062        
   2.000  2.236  2.828  5.568  8.246        
   3.000  3.162  3.606  6.000  8.544        
   4.000  4.123  4.472  6.557  8.944                   
   1.000  1.414                       # this is the problem
  END_DATAGRID_3D                      
 END_BLOCK_DATAGRID_3D                   

Tags: 文件数据innumpyis格式thisblock
1条回答
网友
1楼 · 发布于 2024-04-24 10:18:31

我和熊猫和纽比有点关系。Pandas将为丢失的数据填充nan值。在

import pandas as pd
import numpy as np
df = pd.read_csv("xyz.data", header=None, delimiter=r'\s+', dtype=np.float, skiprows=7, skipfooter=2)
data = df.values.flatten()
data = data[~np.isnan(data)]
result = data.reshape((data.size/3, 3))

输出

^{pr2}$

相关问题 更多 >