2016-07-19 3 views
0

У меня есть четыре 2-мерных np-массива. Форма каждого массива равна (203, 135). Теперь я хочу объединить все эти массивы в один массив по широте и долготе.Объединение/объединение нескольких массивов 2d в один массив с использованием python

Я использовал код ниже, чтобы прочитать данные

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) 

любая помощь?

+0

, пожалуйста, определите ввод данных игрушек (вместо публикации ссылки) и определите выход, который вы хотите достичь для этого примера данных игрушек. –

+1

также, в вашем цикле for, вы повторно устанавливаете элементы = [], эффективно удаляя предыдущие результаты, которые вы достигаете set_elements –

+0

@NikolasRieble, Okey Я создам данные о игрушке и отправлю ее вам – bikuser

ответ

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, данные), которые я предполагаю, что ваши входные массивы (а, б ,CD). В этой операции все же вы их не комбинируете, но вы заменяете элемент элементов (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), либо с данными игрушек, чтобы мы могли вывести функцию, которую вы просите.

+0

Спасибо, что исправили меня и выяснили, что мой вопрос понятен .. я понимаю, что что-то не так в определении заявление ... okey Я попробую – bikuser

Смежные вопросы