有条件地在数组中随机选择位置

时间:2020-01-12 05:21:04

标签: python numpy

我有一个像这样的数组:

A = [[1,0,2,3],
     [2,0,1,1],
     [3,1,0,0]]

我想获取值为== 1的单元格之一的位置,例如A[0][0]A[1][2],依此类推...

到目前为止,我做到了:

A = np.array([[1,0,2,3],
              [2,0,1,1],
              [3,1,0,0]])

B = np.where(A == 1)

C = []
for i in range(len(B[0])):
    Ca = [B[0][i], B[1][i]]
    C.append(Ca)

D = random.choice(C)

但是现在我想重用D来获取单元格值。喜欢:

A[D](无效)应返回与A[1][2]相同的结果

有人能解决这个问题,或者甚至知道更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

这应该对您有用。

A = np.array([[1,0,2,3],
              [2,0,1,1],
              [3,1,0,0]])

B = np.where(A == 1)

C = []
for i in range(len(B[0])):
    Ca = [B[0][i], B[1][i]]
    C.append(Ca)


D = random.choice(C)
print(A[D[0]][D[1]])

这给出了输出。

>>> print(A[D[0]][D[1]])
1

由于D的值为[X,Y],因此可以从矩阵中以A[D[0]][D[1]]的形式获得该值

答案 1 :(得分:0)

似乎您正在尝试随机选择A为1的单元格之一。您可以一直使用numpy,而不必求助于for循环

B = np.array(np.where(A == 1))

>>> B
array([[0, 1, 1, 2],
       [0, 2, 3, 1]])

现在要随机选择与其中一个单元格相对应的列,我们可以使用np.random.randint

column = np.random.randint(B.shape[1])
D = B[:, column]

>>> D
array([1, 2])  # corresponds to the second index pair in B

现在,您可以使用A的元组(对应于维度的索引)简单地索引到D

>>> A[tuple(D)]
1