从不带循环的numpy数组中移除特定值

2024-04-18 18:18:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下numpy数组:

# doors = [[0,1,2],[0,1,2],....,[0,1,2]
doors = np.broadcast_to(np.array([0, 1, 2]),(max_samples, 3))
# first_choice = [ [2],[1],....,[2] ]
first_choice = np.random.randint(3, size=(max_samples, 1))

不使用任何类型的循环(for、while等),我想创建一个名为result的新numpy数组,其中包含具有抑制首选项的门。你知道吗

示例:

first_choice = [ [2], [1], [1], [0] ....]
result = [ [0,1],[0,2],[0,2],[1,2] .....]

我该怎么做?使用任何图书馆,如果接受,如果必要的话,我认为numpy可以这样做的要求,但不知道如何。你知道吗


Tags: tonumpysizenprandom数组resultarray
1条回答
网友
1楼 · 发布于 2024-04-18 18:18:09

有一种可能性:

import numpy as np

max_samples = 10
np.random.seed(100)
doors = np.broadcast_to(np.array([0, 1, 2]),(max_samples, 3))
first_choice = np.random.randint(3, size=(max_samples, 1))
print(first_choice[:, 0])
# [0 0 0 2 2 0 2 1 2 2]
# Take non-matches and reshape
result = doors[doors != first_choice].reshape((-1, 2))
print(result)
# [[1 2]
#  [1 2]
#  [1 2]
#  [0 1]
#  [0 1]
#  [1 2]
#  [0 1]
#  [0 2]
#  [0 1]
#  [0 1]]

显然,要使其起作用,first_choice中的每个值必须在doors的每个对应行中出现一次(而且只能出现一次)。你知道吗

相关问题 更多 >