如何在 Numpy 中将索引数组转换为掩码数组? [英] How can you turn an index array into a mask array in Numpy?

查看:30
本文介绍了如何在 Numpy 中将索引数组转换为掩码数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在给定范围的情况下,是否可以将索引数组转换为 1 和 0 的数组?即 [2,3] -> [0, 0, 1, 1, 0],范围为 5

我正在尝试自动化这样的事情:

<预><代码>>>>index_array = np.arange(200,300)数组([200, 201, ... , 299])>>>mask_array = ???# index_array 和 500 的一些函数数组([0, 0, 0, ..., 1, 1, 1, ... , 0, 0, 0])>>>train(data[mask_array]) # 训练 200~299>>>predict(data[~mask_array]) # 预测 0~199, 300~499

解决方案

这是一种方法:

在[1]中:index_array = np.array([3, 4, 7, 9])在 [2] 中:n = 15在 [3] 中:mask_array = np.zeros(n, dtype=int)在 [4] 中:mask_array[index_array] = 1在 [5] 中:mask_arrayOut[5]: 数组([0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0])

如果掩码总是一个范围,你可以消除index_array,并将1分配给一个切片:

在[6]中:mask_array = np.zeros(n, dtype=int)在 [7] 中:mask_array[5:10] = 1在 [8] 中:mask_arrayOut[8]: 数组([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0])

如果你想要一个布尔值数组而不是整数,请在创建时更改 mask_arraydtype:

在[11]中:mask_array = np.zeros(n, dtype=bool)在 [12] 中:mask_array出[12]:数组([假,假,假,假,假,假,假,假,假,假,假,假,假,假,假],dtype=bool)在 [13] 中:mask_array[5:10] = True在 [14] 中:mask_array出[14]:数组([假,假,假,假,假,真,真,真,真,真,假,假,假,假,假],dtype=bool)

Is it possible to convert an array of indices to an array of ones and zeros, given the range? i.e. [2,3] -> [0, 0, 1, 1, 0], in range of 5

I'm trying to automate something like this:

>>> index_array = np.arange(200,300)
array([200, 201, ... , 299])

>>> mask_array = ???           # some function of index_array and 500
array([0, 0, 0, ..., 1, 1, 1, ... , 0, 0, 0])

>>> train(data[mask_array])    # trains with 200~299
>>> predict(data[~mask_array]) # predicts with 0~199, 300~499

解决方案

Here's one way:

In [1]: index_array = np.array([3, 4, 7, 9])

In [2]: n = 15

In [3]: mask_array = np.zeros(n, dtype=int)

In [4]: mask_array[index_array] = 1

In [5]: mask_array
Out[5]: array([0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0])

If the mask is always a range, you can eliminate index_array, and assign 1 to a slice:

In [6]: mask_array = np.zeros(n, dtype=int)

In [7]: mask_array[5:10] = 1

In [8]: mask_array
Out[8]: array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0])

If you want an array of boolean values instead of integers, change the dtype of mask_array when it is created:

In [11]: mask_array = np.zeros(n, dtype=bool)

In [12]: mask_array
Out[12]: 
array([False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False], dtype=bool)

In [13]: mask_array[5:10] = True

In [14]: mask_array
Out[14]: 
array([False, False, False, False, False,  True,  True,  True,  True,
        True, False, False, False, False, False], dtype=bool)

这篇关于如何在 Numpy 中将索引数组转换为掩码数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆