从Python int列表初始化numpy掩码数组时没有值

从Python int列表初始化numpy掩码数组时没有值,python,arrays,numpy,Python,Arrays,Numpy,如问题的答案所示,如果我们强制使用dtype=float,则可以直接从一个无值列表中初始化一个掩码numpy数组。这些浮点值转换为nan,我们只需执行以下操作: ma.masked_invalid(np.array(a, dtype=float), copy=False) 但是,这不适用于int,例如: ma.masked_invalid(np.array(a, dtype=int), copy=False) 因为中间np.array不会创建为None值(没有int-nan) 基于Pytho

如问题的答案所示,如果我们强制使用dtype=float,则可以直接从一个无值列表中初始化一个掩码numpy数组。这些浮点值转换为nan,我们只需执行以下操作:

ma.masked_invalid(np.array(a, dtype=float), copy=False)
但是,这不适用于int,例如:

ma.masked_invalid(np.array(a, dtype=int), copy=False)
因为中间np.array不会创建为None值(没有int-nan)


基于Python整型列表初始化屏蔽数组的最有效方法是什么,该整型列表也不包含任何值,从而使这些值被屏蔽?

您不能,但是您可以创建一个包含
对象数据类型
单元格的numpy数组

ma.masked\u无效(np.array(a,dtype=object),copy=False)
编辑


否则,您可以在这里查看一下

到目前为止,我找到的最优雅的解决方案(一点也不优雅)是初始化类型为
float
的掩码数组,然后将其转换为
int

ma.masked_invalid(np.array(a, dtype=float), copy=False).astype(int)
这将生成一个适当的NP数组,其中初始数组
a
中的
None
值被屏蔽。例如:

a = [1, 2, 3, None, 4]
ma.masked_invalid(np.array(a, dtype=float), copy=False).astype(int)
我们得到:

masked_array(data = [1 2 3 -- 4],
             mask = [False False False  True False],
       fill_value = 999999)
此外,实际屏蔽的int值变为min int,即

ma.masked_invalid(np.array(column, dtype=float), copy=False).astype(int).data
给出:

array([                   1,                    2,                    3,
       -9223372036854775808,                    4])

可以通过首先创建两个空数组来实现这一点,一个数组的数据类型为
int
,将成为掩码ed数组,另一个数组的数据类型为bool,将成为掩码本身

然后我们遍历Python数组。在
arr\u无_无
中,我们将所有出现的
none
替换为默认值,并在
mask\u mat
中存储Python数组中的原始值是
none
还是整数。最后,我们用这两个组件生成一个屏蔽阵列

def masked_int_array(arr, default=0):
    arr_without_none = numpy.empty(len(arr), dtype=int)
    mask_mat = numpy.empty(len(arr), dtype=bool)
    for i in range(len(arr)):
        arr_without_none[i] = default if arr[i] is None else arr[i]
        mask_mat[i] = arr[i] is None
    return ma.array(data=arr_without_none, dtype=int, mask=mask_mat, copy=False)

我认为如果没有对象数据类型的临时数组,就不会有好的方法来实现这一点。确保您选择的解决方案不会以对象数据类型结尾。是的,但我最终需要int。完整的答案应该为我提供一个int类型的掩码数组。实现这一点最有效的方法是什么?似乎nan的还没有达到numpy int。那么通过object的最佳方法是什么?