使用python

时间:2016-07-19 09:59:05

标签: python arrays numpy gdal

我有四个2维np数组。每个阵列的形状是(203,135)。现在我希望将所有这些数组连接成一个关于纬度和经度的单个数组。

我使用下面的代码来读取数据

import pandas as pd
import numpy as np
import os
import glob
from pyhdf import SD
import datetime
import mpl_toolkits.basemap.pyproj as pyproj

DATA = ({})
files = glob.glob('MOD04*')
files.sort()
for n, f in enumerate(files):       
    SDS_NAME='Deep_Blue_Aerosol_Optical_Depth_550_Land'
    hdf=SD.SD(f)
    lat = hdf.select('Latitude')
    latitude = lat[:]
    min_lat=latitude.min()
    max_lat=latitude.max()
    lon = hdf.select('Longitude')
    longitude = lon[:]
    min_lon=longitude.min()
    max_lon=longitude.max()
    sds=hdf.select(SDS_NAME)
    data=sds.get()

    p = pyproj.Proj(proj='utm', zone=45, ellps='WGS84')
    x,y = p(longitude, latitude)

    def set_element(elements, x, y, data):
        # Set element with two coordinates.
        elements[x + (y * 10)] = data

    elements = []
    set_element(elements,x,y,data)

但是我得到了错误:只有一个元素的整数数组可以转换为索引

您可以找到数据:https://drive.google.com/open?id=0B2rkXkOkG7ExMElPRDd5YkNEeDQ

我根据要求为此问题创建了玩具数据集。 我想要的是从四个(a,b,c,d)数组中获取一个单独的数组。其维度应该类似于(406,270)

a = (np.random.rand(27405)).reshape(203,135)
b = (np.random.rand(27405)).reshape(203,135)
c = (np.random.rand(27405)).reshape(203,135)
d = (np.random.rand(27405)).reshape(203,135)
a_x = (np.random.uniform(10,145,27405)).reshape(203,135)
a_y = (np.random.uniform(204,407,27405)).reshape(203,135)
d_x = (np.random.uniform(150,280,27405)).reshape(203,135)
d_y = (np.random.uniform(204,407,27405)).reshape(203,135)
b_x = (np.random.uniform(150,280,27405)).reshape(203,135)
b_y = (np.random.uniform(0,202,27405)).reshape(203,135)
c_x = (np.random.uniform(10,145,27405)).reshape(203,135)
c_y = (np.random.uniform(0,202,27405)).reshape(203,135)

任何帮助?

1 个答案:

答案 0 :(得分:0)

这应该是一个评论,但评论空间不足以解决这些问题。因此我在这里发帖:

你说你有4个输入数组(a,b,c,d),它们以某种方式集成到输出数组中。据了解,这些阵列中的两个包含位置信息(x,y),例如经度和纬度。代码中唯一可以组合多个输入数组的行是:

def set_element(elements, x, y, data):
        # Set element with two coordinates.
        elements[x + (y * 10)] = data

这里有四个输入变量(元素,x,y,数据),我假设它们是你的输入数组(a,b,c,d)。在此操作中,您尚未组合它们,但是使用新值(数据)覆盖元素元素(index:x + 10y)。

因此,我不了解您的目标输出。

当我要求提供玩具数据时,我有类似的想法:

a = [[1,2]]
b = [[3,4]]
c = [[5,6]]
d = [[7,8]]

这将是一个很容易说明的简单例子:

我想要的是:

res = [[[1,2],[3,4]],[[5,6],[7,8]]]

然后我们可以帮助您找到答案。

因此,请提供有关您想要以数学方式标注的操作(例如x = a + b * c + d)或玩具数据的更多信息,以便我们可以推断出您要求的功能。