[英]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.