簡體   English   中英

合並具有不同長度的掩碼數組的2D列表

[英]Merge 2D list of masked arrays with different lengths

我有一個非常大的掩碼數組列表,我想將它們組合在一起,但數組有不同的長度。 為了保持簡單,這就是我想要做的,我想獲得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)

問題是大多數命令都不起作用,因為它是一個蒙版數組,或者因為它有不同的大小。 我已經檢查了這些問題:

任何幫助表示贊賞!

我們假設有

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)

一種選擇是分別對數據和掩碼使用通常的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM