【问题标题】:Merge 2D list of masked arrays with different lengths合并具有不同长度的屏蔽数组的二维列表
【发布时间】:2018-10-22 14:05:39
【问题描述】:

我有一个非常大的屏蔽数组列表,我想将它们组合在一起,但数组的长度不同。 为了简单起见,这是我想做的,我想获得 C:

A=[[--,--,--,...,--]
   [1,2,3,...,--,--],
   ...
B=[[--,--,--,...,--],
   [4,5,6,...,--,--],
   ...
C=A+B
C=[[--,--,--,...,--,--,--,--,...,--],
   [1,2,3,...,--,--,4,5,6,...,--,--],
   ...
len(A)= 81
len(B)= 81
len(A[0])=2700
len(B[0])= 5000

len(C) = 81
len(C[0])= 7700

所以我基本上只是将两个列表放在一起。 实际上,我的数组 A 看起来像这样(B 类似):

masked_array(
  data=[[--, --, --, ..., --, --, --],
    [--, --, --, ..., --, --, --],
    [--, --, --, ..., --, --, --],
    ...,
    [-3.6872851848602295, -3.732004165649414, -3.7555367946624756,
     ..., -3.8215177059173584, -3.7747914791107178,
     -3.819281816482544],
    [-3.819749116897583, -3.824702739715576, -3.804812431335449, ...,
     -3.863957643508911, -3.840423345565796, -3.8660500049591064],
    [-3.6894078254699707, -3.7181897163391113, -3.7022457122802734,
     ..., -3.8167803287506104, -3.7095720767974854,
     -3.8254523277282715]],
  mask=[[ True,  True,  True, ...,  True,  True,  True],
    [ True,  True,  True, ...,  True,  True,  True],
    [ True,  True,  True, ...,  True,  True,  True],
    ...,
    [False, False, False, ..., False, False, False],
    [False, False, False, ..., False, False, False],
    [False, False, False, ..., False, False, False]],
  fill_value=9.96921e+36,
  dtype=float32)

问题是大多数命令都不起作用,因为它是一个掩码数组,或者因为它具有不同的大小。我已经检查了这些问题:

感谢任何帮助!

【问题讨论】:

  • AB numpy.ma.masked_arrays 是二维数据还是一维列表 numpy.ma.masked_arrays?

标签: python list numpy merge masked-array


【解决方案1】:

一种选择是分别对数据和掩码使用通常的 numpy 操作:

c_data = np.hstack((a.data, b.data))
c_mask = np.hstack((a.mask, b.mask))
c = ma.array(c_data, mask=c_mask)

【讨论】:

    【解决方案2】:

    假设我们有

    import numpy as np
    import numpy.ma as ma
    
    # create a 3 x 4 masked array
    a = np.arange(12).reshape(3, 4)
    a = ma.masked_where(a % 3 == 0, a)
    # masked_array(
    #  data=[[--, 1, 2, --],
    #         [4, 5, --, 7],
    #         [8, --, 10, 11]],
    #   mask=[[ True, False, False,  True],
    #         [False, False,  True, False],
    #         [False,  True, False, False]],
    #   fill_value=999999)
    
    
    # create a 3 x 5 masked array
    b = np.arange(15).reshape(3,5)
    b = ma.masked_where(b % 2 == 0, b)
    # masked_array(
    #   data=[[--, 1, --, 3, --],
    #         [5, --, 7, --, 9],
    #         [--, 11, --, 13, --]],
    #   mask=[[ True, False,  True, False,  True],
    #         [False,  True, False,  True, False],
    #         [ True, False,  True, False,  True]],
    #   fill_value=999999)
    

    然后您可以使用numpy.ma.hstack 将这些水平附加并保留掩码:

    ma.hstack([a, b])
    

    结果

    masked_array(
      data=[[--, 1, 2, --, --, 1, --, 3, --],
            [4, 5, --, 7, 5, --, 7, --, 9],
            [8, --, 10, 11, --, 11, --, 13, --]],
      mask=[[ True, False, False,  True,  True, False,  True, False,  True],
            [False, False,  True, False, False,  True, False,  True, False],
            [False,  True, False, False,  True, False,  True, False,  True]],
      fill_value=999999)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 2014-04-28
      • 2019-02-05
      • 1970-01-01
      相关资源
      最近更新 更多