【问题标题】:python - Populating Array with an indexed arraypython - 使用索引数组填充数组
【发布时间】:2018-01-22 16:18:41
【问题描述】:

我有一个名为“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

如果有任何帮助,我将不胜感激!谢谢:)

【问题讨论】:

  • 如果您提供一小部分数据样本数组以及样本的预期输出以进行验证,可能会更容易理解您想要什么
  • 这是个好主意,我使用更新了我的问题,以便它查看一个小的随机样本。谢谢!

标签: python arrays numpy indexing weather


【解决方案1】:

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

array = [0.5] * 249

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

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

dict = {(40, 249): array}

希望对你有帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 2016-01-25
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2022-08-04
      • 2018-03-08
      相关资源
      最近更新 更多