我有一个索引列表,需要将一个numpy数组拆分为两个基于它的子数组。一个子数组将是位于索引处的元素,另一个将是剩余的元素。任何人都可以推荐一种使用索引表示法的适当方法。下面是一个例子
a = np.arange(10) idx = np.random.choice(10, 3, replace=False)
有了这些数组,我想从a中随机选择三个元素以及其余元素。表达式a[idx]当然给出了第一部分,但a[~idx]是不正确的。必须有一种方法将数组idx转换为它的补码,对吗?
a
a[idx]
a[~idx]
idx
klsxnrf11#
您可以创建一个遮罩来选择元素,然后反转遮罩以选择互补元素:
a = np.arange(10) idx = np.random.choice(10, 3, replace=False) mask = np.zeros_like(a, dtype=bool) mask[idx] = True selected = a[mask] unselected = a[~mask]
样本输出:
>>> selected array([1, 3, 5]) >>> unselected array([0, 2, 4, 6, 7, 8, 9])
jdzmm42g2#
您可以使用sets操作:
sets
a = np.arange(10) idx1 = np.random.choice(10, 3, replace=False) idx2 = np.setdiff1d(np.arange(len(a)), idx1) # Same as: # idx2 = list(set(range(10)).difference(idx1))
输出:
>>> a[idx1] array([2, 4, 8]) >>> a[idx2] array([0, 1, 2, 3, 4, 6, 9])
2条答案
按热度按时间klsxnrf11#
您可以创建一个遮罩来选择元素,然后反转遮罩以选择互补元素:
样本输出:
jdzmm42g2#
您可以使用
sets
操作:输出: