从二维numpy数组采样

时间:2018-12-03 00:08:12

标签: python-3.x numpy numpy-ndarray

我想知道是否存在从2d numpy数组采样的合理有效方法。如果我有通用数组:

dims = (4,4)
test_array = np.arange(np.prod(dims)).reshape(*dims)
test_array
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

然后,我想将其中的两个元素随机设置为一个特定值(假设为100)。我尝试过创建索引数组,然后应用它:

sample_from = np.random.randint(low=0, high=5, size=(2,2))
sample_from
array([[0, 2],
       [1, 1]])

但是,如果我尝试使用此索引,它会给我一个意想不到的答案:

test_array[sample_from]
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [ 4,  5,  6,  7]]])

如果我直接输入索引数组,我会期望(以及想要的结果类型):

test_array[[0,2],[1,1]] = 100
test_array

给予:

array([[  0, 100,   2,   3],
       [  4,   5,   6,   7],
       [  8, 100,  10,  11],
       [ 12,  13,  14,  15]])

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用np.random.choice + np.unravel_index直接分配给您的数组。

test_array[
    np.unravel_index(np.random.choice(np.prod(dims), 2, replace=False), dims)
] = 100