如何解决在Python中选择了随机的一组索引后,如何获取剩余的索引?
使用以下代码来说明我的问题。
import numpy as np
np.random.seed(200)
a = np.array([1,21,6,41,8]) # given an array with 5 elements
idx = np.random.choice(5,3,replace=False) # randomly select 3 indexes between 0 and 4
idx.sort() # sort indexes
print(idx) # [0 3 4]
print(a[idx]) # get random selected subset using the indexes,[ 1 41 8]
如何获取剩余的索引[1,2]?
解决方法
In [123]: np.random.seed(200)
...: a = np.array([1,21,6,41,8]) # given an array with 5 elements
...: idx = np.random.choice(5,3,replace=False) # randomly select 3 indexe
...: s between 0 and 4
...: idx.sort() # sort indexes
In [124]: idx
Out[124]: array([0,4])
In [125]: a[idx]
Out[125]: array([ 1,8])
我们可以创建一个布尔值mask
,然后找到True索引:
In [126]: mask = np.ones(a.shape,bool)
In [127]: mask[idx]=False
In [128]: mask
Out[128]: array([False,True,False,False])
In [129]: np.nonzero(mask)[0]
Out[129]: array([1,2])
In [131]: np.arange(a.shape[0])[mask]
Out[131]: array([1,2])
np.delete
进行相同类型的屏蔽:
In [132]: np.delete(np.arange(a.shape[0]),idx)
Out[132]: array([1,2])
,
一种方法:
inverted_idx = [x not in idx for x in range(0,len(a))]
print(a[inverted_idx])
结果:
[21 6]
如果您喜欢整数掩码(如您以前使用过的掩码),则会创建一个布尔掩码:
inverted_idx = [x for x in range(0,len(a)) if x not in idx]
print(a[inverted_idx])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。