更改np.matrix python中的多个标签?

时间:2018-09-30 10:02:11

标签: python matrix

我的矩阵如下:

@Provides

我想在此矩阵中随机选择3个位置,并在这些位置及其旁边的位置更改标签。结果应该是这样的:

array([[1, 0, 1, 1, 0],
       [1, 0, 0, 0, 0],
       [0, 0, 0, 1, 0],
       [0, 0, 0, 0, 0],
       [1, 0, 0, 0, 0]])

标签是从列表中随机选择的[10、11、12、13、14、15]。如何在python中做到这一点?实际上,我尝试了一些方法,但无法正常工作。

2 个答案:

答案 0 :(得分:1)

应该是

for i in range(3):
    r = np.random.randint(array.shape[0])
    c = np.random.randint(array.shape[0])
    _array[r,c:c+2] = _list[np.random.randint(_list.shape[0])]

您可以传递范围start:finish:step或数组_array[[1,5,7,2]]来创建numpy数组的“视图”,然后可以将其修改为任何普通数组,并且更改会通过原始数组。 / p>

答案 1 :(得分:1)

使用numpyrandom库:

import random
import numpy as np

a = np.array([[1, 0, 1, 1, 0],
              [1, 0, 0, 0, 0],
              [0, 0, 0, 1, 0],
              [0, 0, 0, 0, 0],
              [1, 0, 0, 0, 0]])

f = a.flatten() #to make single dimension array
l = [10, 11, 12, 13, 14, 15] #list of values to be replaced
#np.random.random_integers(0,f.size-1,3) to produce random integers within the max index level
for index in np.random.random_integers(0,f.size-1,3):
    #random.choice(l) to select a random value from list l and replacing original values
    f[index:index+2] = random.choice(l)
    print(index, f[index:index+2], random.choice(l))

7 [14 14] 11
1 [10 10] 14
6 [11 11] 10

#reshaping to the original array shape
a = f.reshape(a.shape)
a

array([[ 1, 10, 10,  1,  0],
       [ 1, 11, 11, 14,  0],
       [ 0,  0,  0,  1,  0],
       [ 0,  0,  0,  0,  0],
       [ 1,  0,  0,  0,  0]])