Замена нескольких строк в массиве numpy? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть вопрос. Я создал случайный массив, используя numpy, как это

n = 3

np.random.seed(1)
arr = np.random.randint(0,2, size = (n,n))

, и, получив это, я получил следующий массив

arr = [[0 1 1]
       [1 0 1]
       [1 1 0]]

. оставьте строку фиксированной, а другую замените ее на ряды нулей, а затем сохраните ее в списке, например, в этом случае я хочу, чтобы три массива были такими:

[[0 1 1]        [[0 0 0]      [[0 0 0]
 [0 0 0]         [1 0 1]       [0 0 0]
 [0 0 0]]        [0 0 0]]      [1 1 0]]

и, когда n = 4, делать то же самое и т. д.

Я знаю, что могу заменить строки следующим образом:

arr[i] = 0 #for any i = 0,1,2

И я попытался сделать это для моего примера

for i in range(n):
    if (i == i):
        arr[i] = 0
        print(a)      

, но это дало мне этот вывод ...

[[0 0 0]        [[0 0 0]      [[0 0 0]
 [0 0 0]         [0 0 0]       [0 0 0]
 [1 1 0]]        [1 1 0]]      [0 0 0]]

Является лучшим питоном c numpy способ выполнения этого требования. Заранее благодарен!

Ответы [ 4 ]

1 голос
/ 12 марта 2020

Попробуйте это:

res = np.zeros(shape=(n,n,n))
for position, element in enumerate(arr): 
     res[position, position] = element
print(res)

Где res - массив с вашими n массивами

1 голос
/ 12 марта 2020

Можете ли вы попробовать это, @Carlos Eduardo Corpus?

def create_arrs(n,seed=1,MIN=0,MAX=2):
    np.random.seed(seed)
    arr = np.random.randint(MIN,MAX,size=(n,n))
    list_arrs=[]
    for i in range(n):
        arrx = np.zeros((n,n))
        arrx[i] = arr[i]
        list_arrs.append(arrx)
    return list_arrs

Вот вывод для n=3: enter image description here

1 голос
/ 12 марта 2020

Я не проверял, но что-то вроде этого должно работать

for i in range(n):
   result = []
   for j in range(n):
      if i == j:
         result.append(arr[i])
      else:
         rowOfn0 = []
         for k in range(n):
            rowOfn0.append(0)             
         result.append(rowOfn0)
   print(result)
0 голосов
/ 12 марта 2020

Одно исправление для ответа @Daan Seuntjens (я не комментировал, потому что у меня нет репутации к нему)

for i in range(n):
    result = []
    for j in range(n):
        if j == i:
            result.append(arr[i])
        else:
            rowOfn0 = []
            for k in range(n):
                rowOfn0.append(0)
            result.append(rowOfn0)
    print(np.array(result))

print (np.array (результат))

...