この形式の数GBのテキストファイルがあります
0 274 593869.99 6734999.96 121.83 1,
0 273 593869.51 6734999.92 121.57 1,
0 273 593869.15 6734999.89 121.57 1,
0 273 593868.79 6734999.86 121.65 1,
0 273 593868.44 6734999.84 121.65 1,
0 273 593869.00 6734999.94 124.21 1,
0 273 593868.68 6734999.92 124.32 1,
0 273 593868.39 6734999.90 124.44 1,
0 273 593866.94 6734999.71 121.37 1,
0 273 593868.73 6734999.99 127.28 1,
Windows 上の Python 2.7 でフィルタリングする単純な関数があります。この関数はファイル全体を読み取り、同じ行idtile
(1 列目と 2 列目) を選択し、点 (x、y、z、およびラベル) のリストとidtile
.
tiles_id = [j for j in np.ndindex(ny, nx)] #ny = number of row, nx= number of columns
idtile = tiles_id[0]
def file_filter(name,idtile):
lst = []
for line in file(name, mode="r"):
element = line.split() # add value
if (int(element[0]),int(element[1])) == idtile:
lst.append(element[2:])
dy, dx = int(element[0]),int(element[1])
return(lst, dy, dx)
ファイルは 32 GB を超えており、ボトルネックはファイルの読み取りです。関数を高速化するために、いくつかの提案や例を探しています (例: 並列計算またはその他のアプローチ)。
私の解決策は、テキスト ファイルをタイルに分割することです (x と y の位置を使用)。ソリューションはエレガントではなく、効率的なアプローチを探しています。