我的矩阵如下:
@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中做到这一点?实际上,我尝试了一些方法,但无法正常工作。
答案 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)
使用numpy
和random
库:
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]])