2017-08-14 65 views
0

我有一个名为“PRECIP”具有形状(2,3,3)numpy的阵列,其对应于(时间,纬度,经度)蟒 - 填充阵列与一个索引数组

array([[[ 0.05368402, 0.43843025, 0.09521903], 
     [ 0.22627141, 0.12920409, 0.17039465], 
     [ 0.48148674, 0.59170703, 0.41321763]], 

     [[ 0.63621704, 0.11119242, 0.25992372], 
     [ 0.67846732, 0.3710733 , 0.25641174], 
     [ 0.1992151 , 0.86837441, 0.80136514]]]) 

我有另一个numpy的(3,4)阵列称为“IDX”,这是指数列表,与形状:

array([[0,0,1,1], # time 
     [0,2,0,2], # x coordinate 
     [0,2,0,2]]) # y coordinate 

到目前为止我已经能够索引“PRECIP”变量与“IDX”可变,这样我得到一个形状为(4,)的数组,即。

>>>accum = PRECIP[idx[0,:],idx[1,:],idx[2,:]] 
array([ 0.05368402, 0.41321763, 0.63621704, 0.80136514]) 

BUT,我需要的是的0“ACCUM”与形状(3,3),填充有“PRECIP”的用于“IDX”每对坐标的总和的阵列。在“IDX”未列出的所有其他格点将为0

基本上我想要看起来像这样

>>>accum  
array([[[ 0.68990106, 0. , 0.  ], # 0.68990106 = 0.05368402 + 0.63621704 
     [ 0.  , 0. , 0.  ], 
     [ 0.  , 0. , 1.21458277], # 1.21458277 = 0.41321763 + 0.80136514 

我想感谢所有帮助数组“ACCUM”!谢谢:)

+0

它可能会更容易理解,如果你提供你的一个小数据样本阵列,以及样品的预期输出,用于验证目的 – DJK

+0

这是一个好主意,你想要什么,我用更新了我的问题,以便它看起来很小的随机样本。谢谢! – jdiction

回答

0

如果我理解正确的话,你需要的是:

array = [0.5] * 249 

它将返回填充每个索引0.5长度249的数组。之后,你可以切片,如果它需要检索你喜欢的元素的数量。

如果这不是你想要的,你可以使用字典并添加一个你想要的方式的元组。

dict = {(40, 249): array} 

我希望它有帮助。

0

将PRECIP的Lat和Lon列中的所有NaN转换为零,然后求和它们并重新整理结果。

np.nan_to_num(PRECIP[idx[1,:], idx[2,:]]).sum(axis=1).reshape(PRECIP.shape[1], PRECIP.shape[2])