我有一个非常大的掩码数组列表,我想将它们组合在一起,但数组的长度不同。 为了简单起见,这就是我想要做的,我想获得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)
问题是大多数命令都不起作用,因为它是一个蒙版数组,或者因为它有不同的大小。我已经检查了这些问题:
感谢任何帮助!
答案 0 :(得分:0)
我们假设我们有
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)
答案 1 :(得分:0)
一种选择是对数据和掩码使用通常的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)