python - 使用索引数组填充数组

时间:2017-08-14 18:48:30

标签: python arrays numpy indexing weather

我有一个名为“PRECIP”的numpy数组,其形状(2,3,3)对应于(time,lat,lon)

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]]])

我有另一个名为“idx”的numpy数组,它是一个索引列表,形状为(3,4):

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

到目前为止,我已经能够使用“idx”变量索引“PRECIP”变量,以便得到一个形状为(4,)的数组,即。

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

但是,我需要的是一个带有形状(3,3)的零“ACCUM”数组,在“IDX”中为每对坐标填充“PRECIP”的总和。 “IDX”中未列出的所有其他网格点将为0。

基本上我想要一个看起来像这个

的数组“accum”
>>>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

我很感激任何帮助!谢谢:))

2 个答案:

答案 0 :(得分:0)

如果我理解你需要的是:

array = [0.5] * 249

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

如果那不是您想要的,您可以使用词典并添加一个您想要的方式的元组。

dict = {(40, 249): array}

我希望它有所帮助。

答案 1 :(得分:0)

将PRECIP的Lat和Lon列中的任何NaN转换为零,然后对它们求和并重新整形结果。

$