Проверка каждого элемента в 2D матрице - PullRequest
0 голосов
/ 29 мая 2019

У меня есть 100x100 matrix в numpy, который сделан из 0's и 1's. У меня также есть canvas из квадратов, которые расположены 100x100. Это canvas соответствует matrix (от первого квадрата до element[0,0], от второго до [1,0]... - строка за строкой слева направо). Я должен проверить каждый элемент из matrix, и если это 0, квадрат должен быть white, а если это 1, квадрат должен быть black. Я пробовал несколько методов, но ни один из них не работает. Как я могу проверить каждый элемент матрицы, чтобы определить черный или белый цвет?

a=0
b=0
m=np.loadtxt("C:\\Users\\DELL\\Desktop\\preklopenie_obrazka.txt", 
skiprows=1 )
for n in range(0,99):
    if m[a][b]==0.0:
        f='white'
    else:
        f='black'
    a+=1
    b+=1

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Вам не нужен цикл

# create the canvas as a copy of the original matrix
canvas=m.copy()
# convert canvas to have 'object' type so it can contain different types
canvas=canvas.astype('object')
#replace the values with the colors
canvas[canvas==0]='white'
canvas[canvas==1]='black'

canvas теперь будет пустым массивом с белым для всех элементов m, равным 0, и черным для всех элементов, равным 1.

0 голосов
/ 29 мая 2019

checkout iamchoosinganame ответ, который является кратким и использует удивительные возможности numpy.

Я оставляю здесь свой ответ только для того, чтобы показать, как правильно выполнить цикл, основываясь на вашем коде:

Ваш код по ошибке проверяет только основную диагональ матрицы.

Подумайте об этом: после того, как вы закончите с a=1 и b=1, вы увеличиваете оба, поэтому следующая итерация будет a=2 и b=2, затем a=3 и b=3 ... и т. Д.

также - range не включительно в конце, поэтому вы хотите, чтобы диапазон (0,100) получал все числа до 99

вы хотите использовать for дважды (также вам не нужно увеличивать переменную цикла самостоятельно):

m=np.loadtxt("C:\\Users\\DELL\\Desktop\\preklopenie_obrazka.txt", skiprows=1 )
for a in range(0,100):
    for b in range(0,100):
        if m[a][b]==0.0:
            f='white'
        else:
            f='black'
        print(f)  # CHANGE: just use f in whatever way you need
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...