1

我需要将一些气象数据存入 MySQL 数据库。FileinputFile.csv是一个以逗号分隔的值列表。每行有 241 行和 481 个值。每条线映射到某个纬度,每个值在该线中的位置映射到某个经度。

还有两个具有相同结构的附加文件,lat.csv以及lon.csv. 这些文件包含inputFile.csv映射中的值的坐标。

因此,要找到 中的值的纬度和经度inputFile.csv,我们需要参考 和 中同一行/位置(或行/列)的lat.csvlon.csv

我想inputFile.csv使用lat.csv和翻译,lon.csv这样我的输出文件包含列表(来自inputFile.csv)、纬度经度

这是一个小的视觉示例:

    inputFile.csv
    3,5,1,4,5
    1,4,1,2,5
    5,7,3,8,0

    lat.csv
    22,31,51,21,52
    55,21,24,66,12
    11,23,12,55,55

    lon.csv
    12,35,12,52,11
    35,11,25,33,42
    62,53,45,25,54


    output:
    val lat lon
    3   22  12
    5   31  35
    1   51  12
    4   21  52
    5   52  11 
    1   55  35
    4   21  11
    1   24  25  
    2   66  33
    etc

在 python/numpy 中执行此操作的最佳方法是什么?

4

2 回答 2

2

我想既然你知道你想要的数组的总大小,你可以预先分配它:

a = np.empty((241*481,3))

现在您可以添加数据:

for i,fname in enumerate(('inputFile.csv','lat.csv','lon.csv')):
    with open(fname) as f:
        data = np.fromfile(f,sep=',')
        a[:,i] = data.ravel()

如果您不知道前面的元素数量,您可以生成一个二维列表(列表np.ndarrays):

alist = []
for fname in ('inputFile.csv','lat.csv','lon.csv'):
    with open(fname) as f:
        data = np.fromfile(f,sep=',')
        alist.append( data.ravel() )
a = np.array(alist).T
于 2012-10-22T15:15:12.240 回答
2

仅使用 numpy 函数:

import numpy as np

inputFile = np.gentfromtxt('inputFile.csv',delimiter = ',')
inputFile.reshape(-1)
lat = np.gentfromtxt('lat.csv',delimiter = ',')
lat.reshape(-1)
lon = np.gentfromtxt('lon.csv',delimiter = ',')
lon.reshape(-1)

output = np.vstack( (inputFile,lat,lon) )
于 2012-10-22T15:23:13.517 回答