Как присвоить единицам и нулям определенные индексы массива, используя numpy? - PullRequest
0 голосов
/ 17 июня 2019

Я хотел построить матрицу 6 x 9 с нулями и единицами ввода следующим образом.В столбце нулевой строки 0–2 должно быть 1, а в столбце первой строки 3–5 - один, а в столбце второй строки 6–8 - один, все остальные записи должны быть нулями.В третьем ряду элемент 0,3,6 должен быть один, а другой - нулями.В четвертом ряду элемент 1,4,7 должен быть одним, а остальные элементы должны быть нулями.В пятом ряду 2,5,8 должен быть один, а остальные должны быть нулями.Половина строк следует одним способом, чтобы ввести значение 1, а другая половина строки следует другим процедурам, чтобы ввести значение один.Как расширить этот случай примерно в 20 x 100, когда первые 10 строк следуют одной процедуре, как указано выше, а вторая половина - другим процедурам

Матрица 6x9 по матрице выглядит следующим образом

[[1,1,1,0,0,0,0,0,0],
 [0,0,0,1,1,1,0,0,0],
 [0,0,0,0,0,0,1,1,1],
 [1,0,0,1,0,0,1,0,0],
 [0,1,0,0,1,0,0,1,0],
 [0,0,1,0,0,1,0,0,1]]
 EDIT: Code I used to create this matrix:
 import numpy as np
 m=int(input("Enter the value of m, no. of points = "))
 pimatrix=np.zeros((2*m +1)*(m**2)).reshape((2*m+1),(m**2))
 for i in range(2*m + 1):
    for j in range(m**2):
        if((i<m) and ((j<((i+1)*m) and j>=(i*m)))): 
           pimatrix[i][j]=1
        if (i>(m-1)):
           for k in range(-1,m-1,1):
              if(j == i+(k*m)):
                pimatrix[i][j]=1 
        if i==2*m:
           pimatrix[i][j]=1
 print(pimatrix)            

1 Ответ

0 голосов
/ 17 июня 2019

Лучший подход зависит от правил, которым вы планируете следовать, но простой подход - инициализировать массив как массив нулей:

import numpy as np

a = np.zeros([3, 4], dtype = int)

Затем вы можете написать логику для циклического переборасоответствующие строки и установите 1 по мере необходимости.Вы можете просто получить доступ к любому элементу массива по его координатам:

a[2,1] = 1

print(a)

Результат:

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

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

Реализация этого с вашим примером:

import numpy as np

a = np.zeros([6, 9], dtype=int)


def set_ones(a, run_length, start, end):
    for n in range(a.shape[1]):
        a[start + ((n // run_length) % (end - start)), n] = 1


set_ones(a, 3, 0, a.shape[0] // 2)
set_ones(a, 1, a.shape[0] // 2, a.shape[0])

print(a)

Результат:

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