Изменить несколько меток в np.matrix python? - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть матрица, как показано ниже:

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]])

Я хочу выбрать случайным образом 3 позиции в этой матрице и изменить метки в этой позиции и рядом с ней.Результат должен выглядеть следующим образом:

array([[1, 0, 1, 1, 0],
       [1, 12, 12, 0, 0],
       [0, 0, 0, 1, 0],
       [0, 13, 13, 14, 14],
       [1, 0, 0, 0, 0]])

Метки выбираются случайным образом из списка [10, 11, 12, 13, 14, 15].Как я могу сделать это в Python?На самом деле я пробовал некоторые методы, но они не работают должным образом.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Использование библиотек 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]])
0 голосов
/ 30 сентября 2018

это будет

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]], чтобы создать «представления» для массива, который вы затем можете изменить как любой обычный массив и изменения.перенести желоб в исходный массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...